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();
}
我不会偏爱一个而不是另一个,而是选择有效的一个。
话虽如此,我会强烈尝试在这一点上不使用魔法,我个人更喜欢通过定义的名称而不是变量来调用显式定义的方法。只是为了不引入难以调试的魔法。