如何从PHP扩展重载函数?
我已经阅读了一些PHP扩展教程,但是我找不到任何关于如何重载现有函数的信息 例如,我想将fopen()更改为如何从PHP扩展重载函数?,php,php-internals,Php,Php Internals,我已经阅读了一些PHP扩展教程,但是我找不到任何关于如何重载现有函数的信息 例如,我想将fopen()更改为 PHP_FUNCTION(fopen) { if condition_is_true(condition) original_fopen(); else show_error(); } 我怎么能这么做? 多谢各位 我指的是扩展名(用C编写,编译成.so并包含在httpd.conf中,而不是.php程序中) 编辑:多亏了Gordon li
PHP_FUNCTION(fopen)
{
if condition_is_true(condition)
original_fopen();
else
show_error();
}
我怎么能这么做?
多谢各位
我指的是扩展名(用C编写,编译成.so并包含在httpd.conf中,而不是.php程序中)
编辑:多亏了Gordon links,找到了解决方案。 我已经下载了函数的PECL包
rename\u function
。它的源代码让我得出了必要的结论:
- 有一个全局哈希表
,它根据函数名保存函数的所有指针function\u table
/zend\u hash\u find
/zend\u hash\u add
将允许我在此表中进行任何更改zend\u hash\u del
index.php
)
您可以使用它创建一个名为my\u global\u functions.php的新php文件,并像
require_once "my_global_functions.php"
现在只需在那里创建一个新函数,如
function my_fopen(){
if condition_is_true(condition)
fopen();
else
show_error();
}
您现在应该可以在代码中的任何位置调用我的fopen
。我严重怀疑您是否被允许这样做。这将导致PHP中内置的某些函数突然表现出与预期不同的行为。我在问题中添加了注释,稍微澄清一下:我指的是扩展(用C编写,编译为.so,包含在httpd.conf中,而不是.PHP脚本中)