我正在寻找一种方法来重新声明,覆盖或重命名PHP4中的函数,以便在调用另一个函数的类上执行单元测试。我希望这个函数成为测试函数。
我有几个限制因素:
答案 0 :(得分:2)
从技术上讲,可以使用override_function()
或rename_function()
函数。
虽然这不是一个非常干净的方式来处理它,而是我建议你更新你的课程,以允许你将呼叫重定向到其他地方。
例如,您可以更改此内容:
class MyClass {
public function doSomething() {
...
do_complex_calc();
...
}
}
对于这样的事情:
class MyClass {
public $calc_helper = 'do_complex_calc';
public function doSomething() {
...
$helper = $this->calc_helper;
$helper();
...
}
}
$x = new MyClass();
$x->calc_helper = 'another_func_for_testing';
$x->doSomething();
可以清理得更多,但它显示了一般的想法。例如,我不建议将$calc_helper
变量保留为公共变量 - 我会实现某种方法来改变它。
答案 1 :(得分:0)
要覆盖该功能,您可以使用function_exists
检查功能是否退出,但您可以重新声明该功能
if (!function_exists('function_name')) {
// ... proceed to declare your function
}