【问题标题】:How can I redeclare, overwrite or rename a function in PHP4?如何在 PHP4 中重新声明、覆盖或重命名函数?
【发布时间】:2013-06-27 06:56:35
【问题描述】:

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

我有几个限制:

  • 它必须适用于 PHP4。
  • 它必须开箱即用,无需安装其他东西。 (没有广告或其他)。

【问题讨论】:

标签: php function php4


【解决方案1】:

从技术上讲,可以使用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 变量保留为公共变量 - 我会实施某种方法来让您更改它。

【讨论】:

  • 是的,我也有同样的想法。这甚至可能适用于我的任务。谢谢
  • @Alex 我刚刚更新了我的答案以反映它可能的事实,尽管我仍然推荐我最初描述的方式。
【解决方案2】:

要覆盖函数,您可以使用function_exists 检查函数是否退出,但您可以重新声明函数

if (!function_exists('function_name')) {
    // ... proceed to declare your function
}

【讨论】:

    猜你喜欢
    • 2010-11-28
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多