2012-01-28 3 views
3

필자는 PHP 확장 튜토리얼을 살펴 보았지만 기존 함수를 오버로드하는 방법에 대한 정보는 찾을 수 없습니다.PHP 확장 기능에서 오버로드하는 방법은 무엇입니까?

예를 들어, 나는 그렇게 할 수있는 방법

PHP_FUNCTION(fopen) 
{ 
    if condition_is_true(condition) 
     original_fopen(); 
    else 
     show_error(); 
} 

같은 것을로는 fopen()을 변경하려면? 감사합니다.

PS입니다. 해결책 발견 고든 링크 덕분에 : 나는 (httpd.conf 파일에 .so를 컴파일하고 포함 C로 작성 아닌 .PHP 프로그램) 확장


편집을 의미한다.

기능 rename_function에 대한 PECL 패키지를 다운로드했습니다. 소스 코드는 필요한 결론에 저를 주도하고있다 :

  • 자신의 이름을 기반으로 기능에 대한 모든 포인터를 보유하고 글로벌 해시 테이블 function_table,있다.

  • zend_hash_find/zend_hash_add/이 표에서 내가 원하는대로 변경할 수 있습니다. 당신이 젠드 프레임 워크를 사용하는 경우

+1

나는 그 일을하도록 허락을 심각하게 의심합니다. 그것은 PHP에 내장 된 일부 기능에 대해 거룩한 일을하여 갑자기 예상과 다르게 동작합니다. – GordonM

답변

-2

는 모든 요청 당신은 my_global_functions.php라는 새로운 PHP 파일을 만들려면이를 사용할 수있는 동일한 부트 스트랩 파일 (공개 디렉토리에있는 보통 index.php)

통해 이동처럼 포함

require_once "my_global_functions.php" 

지금 바로

function my_fopen(){ 
    if condition_is_true(condition) 
     fopen(); 
    else 
     show_error();   
} 
처럼이 새로운 기능을 만들

코드의 어느 곳에서나 my_fopen으로 전화를 걸 수 있습니다.

+1

내 질문에 메모를 추가하여 조금 더 명확하게하기 위해 : C로 작성된 .so로 컴파일되고 httpd에 포함 된 확장을 의미합니다. conf가 아니라 .php 스크립트) – Vasisualiy

관련 문제