4

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

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

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

我怎么能那样做?谢谢

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


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

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

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

  • zend_hash_find//将允许我在这个表中做任何我想做的改变zend_hash_addzend_hash_del

4

1 回答 1

-3

如果您使用 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从代码中的任何位置调用。

于 2012-01-28T14:47:38.753 回答