PHP:即使返回bool true,override_function也不会覆盖

时间:2012-10-05 09:15:08

标签: php function require

我正在通过pecl

使用从apd.so库安装的ovverride_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

因此,即使函数似乎有效(bool true),require函数仍然可以作为旧函数。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

require不是一个函数,它是一种语言结构,如functionecho。尝试拨打require index.php(没有()),在没有()的情况下调用普通函数时仍然可以正常工作。文档没有明确说明它,但它列在“控制结构”下,因此override_function不适用于此require(或任何其他语言结构)。