【问题标题】:PHP Closure class gives Fatal error?PHP Closure 类给出致命错误?
【发布时间】:2013-07-01 16:14:06
【问题描述】:

我得到了这个:

PHP 致命错误:调用未定义的方法 Closure::bind()

我得到错误的那一行是:

public function bind($signal, $callback)
{

    if (!array_key_exists($signal, $this->_registry))
        $this->_registry[$signal] = array();
    $this->_registry[$signal][] = \Closure::bind($callback, null, 'static'); // here

    return $this;
}

如您所见,我使用Closure::bind(),因为它在manual 中显示。请注意,我使用的是\Closure::bind()(注意斜线),因为我使用命名空间自动加载,需要通知自动加载器它应该查看系统命名空间。

注意

仔细查看文档中的每个类,并注意每个细节:)

【问题讨论】:

  • 你使用的是什么版本的 PHP?
  • 您的服务器上的 PHP 版本是什么?
  • 版本 5.3.16 在本地主机上
  • @DaGhostmanDimitrov:你的问题就在那里!你需要 5.4 才能工作。
  • 然后看我的回答:]

标签: php closures


【解决方案1】:

检查你的 php 版本,显然你不在 >= 5.4.0!

【讨论】:

  • 好吧,为什么在 __construct 中说最低版本是 >= 5.3.0 :D
  • 在 5.3 中存在闭包,但在 5.4 中添加了方法:]
  • 你必须小心这样的新东西;他们喜欢在以后的更新中扩展他们的课程!
  • ty 用于清除 :D 和快速响应所有 :) 是的,我只看构造函数...并认为整个类都在那里 :D
【解决方案2】:

您需要确保您的 PHP 版本支持该方法。
您可以使用method_exists() 命令检查方法是否存在。您尝试执行的方法仅适用于 PHP 5.4.0 或更高版本!

有关检查方法存在的更多信息,请查看此处:http://php.net/manual/en/function.method-exists.php

【讨论】:

  • 它不是一个函数它是一个方法:) 正确的检查方法不是函数存在,而是new ReflectionClass(Object)::hasMethod($methodName);
  • yh +1 更简单:D
【解决方案3】:

您需要检查您的 PHP 版本。文档指出版本至少应为 5.4.0

链接:-Closure

【讨论】:

  • 我会争辩..因为错误是该方法不存在:)
  • 哦...是的,我明白了。我的坏;)
  • @Vivek:可能会添加一个文档链接。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 2012-01-12
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多