如何在PHP4中重新声明、覆盖或重命名函数?

如何在PHP4中重新声明、覆盖或重命名函数?,php,function,php4,Php,Function,Php4,我正在寻找一种在PHP4中重新声明、覆盖或重命名函数的方法,以便对调用另一个函数的类执行单元测试。我希望这个函数是一个测试函数 我有几个限制: 它必须适用于PHP4 它必须在开箱即用的情况下工作,而无需安装其他设备。(无adp或其他内容) 要覆盖函数,您可以使用函数\u exists检查函数是否退出,但您可以重新声明函数 if (!function_exists('function_name')) { // ... proceed to declare your function }

我正在寻找一种在PHP4中重新声明、覆盖或重命名函数的方法,以便对调用另一个函数的类执行单元测试。我希望这个函数是一个测试函数

我有几个限制:

  • 它必须适用于PHP4
  • 它必须在开箱即用的情况下工作,而无需安装其他设备。(无adp或其他内容)
要覆盖函数,您可以使用
函数\u exists检查函数是否退出
,但您可以重新声明函数

if (!function_exists('function_name')) {
    // ... proceed to declare your 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\u helper
变量保留为public-我会实现某种方法让您更改它。

可能重复的Yes确切地说,我也有同样的想法。这甚至可能适用于我的任务。Thanks@Alex我只是更新了我的答案,以反映这是可能的,尽管我仍然推荐我最初描述的方式。