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();
}
}
}
是否存在一个可能优先于另一个的条件?
答案 0 :(得分:4)
你的例子缺乏清晰度。
通常情况下,拥有一些可理解的代码会更好:
$callback = array($this, $method):
if (is_callable($callback)) {
call_user_func($callback);
}
然而,根据口味,您可能更喜欢:
if (is_callable($callback)) {
$callback();
}
我不赞成另一个,但是拿一个有效的。
话虽如此,我强烈建议不要在这一点上使用魔法,我个人更喜欢用他们定义的名称而不是变量来调用显式定义的方法。只是为了不介绍难以调试的魔法。