PHP 中的call_user_func变量与变量


call_user_func vs variable variables in 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();
        }
    }
}

是否有可能比另一种更可取的条件?

您的示例缺乏清晰度。

通常最好有一些可以理解的代码:

$callback = array($this, $method):
if (is_callable($callback)) {
    call_user_func($callback);
}

但是,根据口味,您可能更喜欢:

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

我不会偏爱一个而不是另一个,而是选择有效的一个。

话虽如此,我会强烈尝试在这一点上不使用魔法,我个人更喜欢通过定义的名称而不是变量来调用显式定义的方法。只是为了不引入难以调试的魔法。