call_user_func与PHP中的变量变量

时间:2014-12-26 23:17:48

标签: php

call_user_func和使用变量变量之间是否存在显着差异?

以此类为例:

class someClass{

    protected function action_this() { ... }
    protected function action_that() { ... }

}

这是更好还是更有效

class myClass extends someClass{

    public function doAction($action='this'){
        $method="action_{$action}";
        if(is_callable (array($this,$method)) ){
            call_user_func(array($this,$method));
        }
    }

}

大于

class myClass extends someClass{

    public function doAction($action='this'){
        $method="action_{$action}";
        if(is_callable (array($this,$method)) ){
            $this->$method();
        }
    }

}

是否存在一个可能优先于另一个的条件?

1 个答案:

答案 0 :(得分:4)

你的例子缺乏清晰度。

通常情况下,拥有一些可理解的代码会更好:

$callback = array($this, $method):

if (is_callable($callback)) {
    call_user_func($callback);
}

然而,根据口味,您可能更喜欢:

if (is_callable($callback)) {
    $callback();
}

我不赞成另一个,但是拿一个有效的。

话虽如此,我强烈建议不要在这一点上使用魔法,我个人更喜欢用他们定义的名称而不是变量来调用显式定义的方法。只是为了不介绍难以调试的魔法。