如果我有一个功能:
function this($a){ return $a; }
如果我想重新定义函数,它会像重写它一样简单吗?
function this($a, $b){ //New this function return $a * $b; }
Annika Backs.. 23
不,那会引发一个错误:
Fatal error: Cannot redeclare foo()
runkit提供选项,包括runkit_function_rename()
和runkit_function_redefine()
.
不,那会引发一个错误:
Fatal error: Cannot redeclare foo()
runkit提供选项,包括runkit_function_rename()
和runkit_function_redefine()
.
如果你的意思是在Java意义上的重载,那么答案是否定的,这是不可能的.
在函数上引用PHP手册:
PHP不支持函数重载,也不可能取消定义或重新定义以前声明的函数.
您可以使用runkit
扩展,但在生产场景中使用runkit通常被认为是值得怀疑的做法.如果要在运行时交换算法,请查看策略模式或匿名函数.
如果通过重新定义你的意思是添加到现有的userland函数,重构,替换或重写,那么是:它就像你所显示的一样简单.只需将其他代码添加到该函数中,但请确保为向后兼容性设置了默认值.
另一种选择是使用http://antecedent.github.io/patchwork
拼布是一个PHP库,能够在运行时重新定义用户定义的函数和方法,松散的复制功能
runkit_function_redefine
在纯PHP 5.3的代码,其中,除其他事项外,让你可以使用测试双打代替静态和私有方法.
您不能在PHP中重新定义或"取消定义"函数(不使用第三方模块).但是,您可以有条件地定义函数.
所以,如果你知道函数A可以在别处定义,但并非总是如此,你可以像这样包装它:
if (!function_exists('A')) { function A() { // default A implementation } }
然后,您只需要确保首先遇到所需的实现:
function A() { // another A implementation }