你可以用Python做到这一点,但它可以用PHP吗?
>>> def a(): print 1 ... >>> def a(): print 2 ... >>> a() 2
例如:
function var_dump() {} ?> Fatal error: Cannot redeclare var_dump() in /tmp/- on line 1
Silviu G.. 14
这有点晚了,但我只想指出,自PHP 5.3以来,实际上可以在不使用PHP扩展的情况下覆盖内部函数.
诀窍是您可以在命名空间内重新定义内部PHP函数.它基于PHP为函数命名解析的方式:
在命名空间内(比如A\B),在运行时解析对非限定函数的调用.以下是对函数foo()的调用如何解决:
它从当前命名空间中查找函数:A\B\foo().
它试图找到并调用全局函数foo()
Paolo Bergan.. 9
不,不可能像你期望的那样做到这一点.
来自manual
:
PHP不支持函数重载,也不可能取消定义或重新定义以前声明的函数.
但是,你可以使用runkit_function_redefine
和它的表兄弟,但它绝对不是很优雅......
你也可以create_function
用来做这样的事情:
与runkit一样,它不是很优雅,但它提供了您正在寻找的行为.
这有点晚了,但我只想指出,自PHP 5.3以来,实际上可以在不使用PHP扩展的情况下覆盖内部函数.
诀窍是您可以在命名空间内重新定义内部PHP函数.它基于PHP为函数命名解析的方式:
在命名空间内(比如A\B),在运行时解析对非限定函数的调用.以下是对函数foo()的调用如何解决:
它从当前命名空间中查找函数:A\B\foo().
它试图找到并调用全局函数foo()
不,不可能像你期望的那样做到这一点.
来自manual
:
PHP不支持函数重载,也不可能取消定义或重新定义以前声明的函数.
但是,你可以使用runkit_function_redefine
和它的表兄弟,但它绝对不是很优雅......
你也可以create_function
用来做这样的事情:
与runkit一样,它不是很优雅,但它提供了您正在寻找的行为.
我意识到这个问题有点陈旧,但Patchwork是最近发布的PHP 5.3项目,它支持重新定义用户定义的函数.但是,正如作者所提到的,你需要使用runkit或php-test-helpers来修补核心/库函数.