2012-10-05 129 views
1

我通过PECL利用apd.so库安装ovverride_function这似乎PHP:即使布尔返回true

不能按预期工作override_function不会覆盖

这是我的脚本

function my_require($path) { 
    echo "HELLO\n"; 
    echo $path; 
} 


$b = override_function('require', '$path', 'return my_require($path);'); 
var_dump($b); 
require './index.php'; 

我期望什么是看到作为输出

bool(true) 
HELLO 
./index.php 

相反,我得到了

bool(true) 

Warning: require(./index.php): failed to open stream: No such file or directory in /var/www/test/script/test.php on line 14 

所以,即使功能似乎工作(布尔真)需要功能仍然充当旧的。

有什么想法?

+5

IIRC'require'不是函数,它是像'function'或'echo'这样的语言结构。尝试调用'require index.php'(不带'()'),它在调用普通函数时不会调用'()'将不起作用。文档没有明确说明它是什么,但它列在“控制结构”下,所以这就是为什么'override_function'可能不适用于这个。 – clentfort

+0

true @clentfort –

回答

2

require不是函数,它是一种语言结构,如functionecho。尝试调用require index.php(不包括()),它在调用普通函数时仍然可以工作,而不会通过()。该文档没有明确说明它是什么,但它列在“控制结构”下,因此override_function不适用于此require(或任何其他语言结构)。

+0

非常感谢您的解释。 –