无法使用变量变量在PHP 5.5中执行函数

时间:2015-02-27 15:23:10

标签: php php-5.5

我的自己和另一位开发人员都在两个独立的系统(Ubuntu和OSX)上安装了Lamp,由于一些奇怪的原因,我们内部开发的软件包不再适用于PHP 5.5(在我的情况下为5.5.9)

特别是一个领域是:

if (method_exists($this, 'hook_' . __FUNCTION__)) {
    $this->{'hook_' . __FUNCTION__}();
}

上面的代码导致错误,指出名为hook_xxx的方法不存在,但是如果我们用以下代码替换代码:

if (method_exists($this, 'hook_' . __FUNCTION__)) {
    call_user_func(array($this, 'hook_' . __FUNCTION__));
}

效果很好。

更糟糕的是,这适用于PHP 5.4.33 ..

我刚刚花了2天时间与PHPBrew等人一起试图安装PHP 5.4.33并认为解决方案实际上是在试图找出它为什么会失败的原因。

有什么想法吗?

由于

加文


我得到的错误是:

Call to undefined method LocalController::hook_index()

我所拥有的地方:

<?php

    class Controller
    {
        public function index() {

            echo 'Parent index called';

            if (method_exists($this, 'hook_' . __FUNCTION__)) {
                $this->{'hook_' . __FUNCTION__}();
            }
        }
    }

    class LocalController extends Controller
    {
        public function hook_index() {

            echo 'Child index called';

        }
    }

它自己将在Controller中加载的应用程序然后如果它存在,它将加载到LocalController中。

这一切在5.4上工作正常,或者如果我将其更改为使用call_user_func,否则会因上述错误而死亡。

1 个答案:

答案 0 :(得分:2)

尝试进行字符串连接并在单独的步骤中调用

        $f = 'hook_' . __FUNCTION__;
        print('testing function ' . $f);

        if (method_exists($this, $f)) {
            $this->$f();
        } 
        $this->response->setOutput($this->render());