重新定义 PHP 函数?
如果我有一个函数:
function this($a){
return $a;
}
如果我想重新定义函数,它会像重写它一样简单吗?
function this($a, $b){ //New this function
return $a * $b;
}
如果我有一个函数:
function this($a){
return $a;
}
如果我想重新定义函数,它会像重写它一样简单吗?
function this($a, $b){ //New this function
return $a * $b;
}
不,这会引发一个错误:
Fatal error: Cannot redeclare foo()
runkit 提供了选项,包括 runkit_function_rename()
和 runkit_function_redefine()。
。
如果你的意思是Java意义上的重载,那么答案是否定的,这是不可能的。
引用 PHP 函数手册:
PHP 不支持函数重载,也无法取消定义或重新定义以前声明的函数。
您可以使用扩展,但在生产方案中使用 runkit 通常被认为是可疑的做法。如果要在运行时交换算法,请查看策略模式或匿名函数。runkit
如果重新定义的意思是添加到现有的用户空间函数,重构,替换或重写,那么是的:它就像你展示的那样简单。只需将其他代码添加到函数中,但请确保为向后兼容性设置默认值。
另一种选择是使用 http://antecedent.github.io/patchwork
Patchwork是一个PHP库,可以在运行时重新定义用户定义的函数和方法,松散地复制纯PHP 5.3代码中的功能,除其他外,它使您能够用测试替身替换静态和私有方法。
runkit_function_redefine