我正在寻找一种在 PHP4 中重新声明、覆盖或重命名函数的方法,以便对调用另一个函数的类执行单元测试。我希望这个函数成为一个测试函数。
我有几个限制:
- 它必须适用于 PHP4。
- 它必须开箱即用,无需安装其他东西。(没有广告或其他)。
从技术上讲,可以使用override_function()
orrename_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
变量保留为 public - 我会实现某种方法来让您更改它。
对于覆盖函数,您可以检查函数是否退出使用function_exists
,但您可以重新声明函数
if (!function_exists('function_name')) {
// ... proceed to declare your function
}