方法的call_user_func

时间:2012-01-10 16:21:19

标签: php function methods

之间有什么区别:

$callback = array(&$this, 'method');
$callback[0]->$callback[1]($args);

call_user_func(array(&$this, 'method'), $args);

3 个答案:

答案 0 :(得分:2)

不,调用变量方法/函数和使用call_user_func之间没有区别。我还没遇到过需要后者的情况。顺便说一句,您不需要通过引用传递$this;所有对象都通过引用自动传递。

答案 1 :(得分:2)

没有区别,但我更喜欢第二个的可读性。第一个不太清楚,需要两行......

答案 2 :(得分:1)

我还没有真正看到第一个使用的示例,但它似乎有效并且应该比call_user_func()更快,因为您没有调用另一个函数的开销。

更新:

此外,如果您启用了E_STRICT错误级别,则无法使用call_user_func()执行此操作:

// ...

public function &example($foo)
{
    $this->bar = 'foo';
    return $this->bar;
}

// ...

$dummy = &$callback[0]->$callback[1]($args);

在这种情况下,call_user_func()会触发这样的内容:

  

PHP严格标准:只应在第X行的php shell代码中通过引用分配变量