【问题标题】:call_user_func on methodscall_user_func 方法
【发布时间】:2012-02-07 01:28:49
【问题描述】:

两者有什么区别:

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

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

?

【问题讨论】:

  • 第一个相当于:$x='method'; $this->$x($args);但是因为它在运行时处理函数名,所以它必须使用 call_user_func

标签: php function methods


【解决方案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 代码中只能通过引用分配变量

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2010-11-02
        • 1970-01-01
        • 1970-01-01
        • 2011-06-30
        • 1970-01-01
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多