2012-10-05 2 views
1
내가 PECL을 통해 apd.so 라이브러리에서 설치 한 ovverride_function을 사용하고

PHP : 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 

으로 볼 수 있었다 대신에 나는 함수 (부울 TRUE) 일 듯 요구하는 기능은 여전히 ​​이전의 역할을 그래서 경우에도

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'를 호출하면,'()'하지 않고 정상적인 함수를 호출하는 동안에도 여전히 동작합니다. 문서에 명시 적으로 명시되어 있지는 않지만 "Control Structures"아래에 나열되어 있으므로이 때문에 override_function이 작동하지 않을 수 있습니다. – clentfort

+0

true @clentfort –

답변

2

require은 함수가 아니며 function 또는 echo과 같은 언어 구조입니다. require index.php (() 제외)으로 전화를 걸면 ()없이 정상적인 기능을 호출하는 동안 계속 작동합니다. 설명서에 명시 적으로 언급되어 있지 않지만 "제어 구조"에 나열되어 있으므로 override_function이이 require (또는 다른 언어 구문)에서 작동하지 않는 이유가됩니다.

+0

설명에 감사드립니다. –