2012-10-05 94 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

非常感謝您的解釋。 –