Как перегрузить функции из расширения PHP? - PullRequest
3 голосов
/ 28 января 2012

Я изучал некоторые уроки по расширению PHP, но не могу найти никакой информации о том, как перегрузить существующую функцию.

Например, я хочу изменить fopen () на что-то вроде

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

Как я мог это сделать?Спасибо

PS.Я имею в виду расширение (написанное на C, скомпилированное в .so и включенное в httpd.conf, а не в программу .php)


Редактировать: благодаря решению Гордона найдено решение.

Я скачал пакет PECL для функции rename_function.Его исходный код привел меня к необходимым выводам:

  • Существует глобальная хеш-таблица function_table, которая содержит все указатели для функций на основе их имен.

  • zend_hash_find / zend_hash_add / zend_hash_del позволит мне внести любые изменения, которые я хочу внести в эту таблицу.

1 Ответ

0 голосов
/ 28 января 2012

Если вы используете Zend Framework, все запросы проходят через один и тот же файл начальной загрузки (обычно index.php в вашем общедоступном каталоге)

. Вы можете использовать это для создания нового php-файла с именем my_global_functions.php и включениянапример,

require_once "my_global_functions.php"

, просто создайте там новую функцию, такую ​​как

function my_fopen(){ 
    if condition_is_true(condition)
        fopen();
    else
        show_error();        
}

, теперь вы сможете вызывать my_fopen из любой точки вашего кода.

...