重新定义 PHP 函数?

2022-08-30 12:42:20

如果我有一个函数:

function this($a){
   return $a;
}

如果我想重新定义函数,它会像重写它一样简单吗?

function this($a, $b){  //New this function
   return $a * $b;
}

答案 1

不,这会引发一个错误:

Fatal error: Cannot redeclare foo()

runkit 提供了选项,包括 runkit_function_rename()runkit_function_redefine()。


答案 2

如果你的意思是Java意义上的重载,那么答案是否定的,这是不可能的。

引用 PHP 函数手册

PHP 不支持函数重载,也无法取消定义或重新定义以前声明的函数。

您可以使用扩展,但在生产方案中使用 runkit 通常被认为是可疑的做法。如果要在运行时交换算法,请查看策略模式匿名函数runkit

如果重新定义的意思是添加到现有的用户空间函数,重构,替换或重写,那么是的:它就像你展示的那样简单。只需将其他代码添加到函数中,但请确保为向后兼容性设置默认值。

另一种选择是使用 http://antecedent.github.io/patchwork

Patchwork是一个PHP库,可以在运行时重新定义用户定义的函数和方法,松散地复制纯PHP 5.3代码中的功能,除其他外,它使您能够用测试替身替换静态和私有方法。runkit_function_redefine


推荐