如何从PHP扩展中重载函数?

时间:2012-01-28 14:38:58

标签: php php-internals

我一直在浏览一些PHP扩展教程,但是我找不到有关如何重载现有函数的任何信息。

例如,我想将fopen()更改为

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

我怎么能这样做? 谢谢

PS。我的意思是扩展(用C编写,编译为.so并包含在httpd.conf中,而不是.php程序)


编辑:感谢Gordon链接找到解决方案。

我已经下载了功能rename_function的PECL包。它的源代码使我得出了所需的结论:

  • 有全局哈希表function_table,它根据名称保存函数的所有指针。

  • zend_hash_find / zend_hash_add / zend_hash_del将允许我在此表中进行任何我想要的更改。

1 个答案:

答案 0 :(得分:-2)

如果您使用的是Zend Framework,那么所有请求都会通过相同的引导文件(通常是公共目录中的index.php

您可以使用它来创建一个名为my_global_functions.php的新php文件,并将其包含在

require_once "my_global_functions.php"

现在只需创建一个新功能

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

您现在可以从代码中的任何位置拨打my_fopen