【问题标题】:Anonymous function for a method of an object [duplicate]对象方法的匿名函数[重复]
【发布时间】:2011-07-21 12:08:56
【问题描述】:

可能重复:
Calling closure assigned to object property directly

为什么这在 PHP 中是不可能的?我希望能够为特定对象动态创建函数。

$a = 'a';
$tokenMapper->tokenJoinHistories = function($a) {
   echo $a;
};
$tokenMapper->tokenJoinHistories($a);

【问题讨论】:

  • 您从这段代码中得到的错误是什么?

标签: php anonymous-function


【解决方案1】:

PHP 尝试匹配一个未在原始类中定义的名为“tokenJoinHistories”的实例方法

你必须这样做

$anon_func = $tokenMapper->tokenJoinHistories;
$anon_func($a);

阅读文档here,尤其是评论部分。

【讨论】:

    【解决方案2】:

    使用$obj->foo() 你调用方法,但你想调用一个属性as一个函数/方法。这只会让解析器感到困惑,因为他没有找到名称为 foo() 的方法,但他不能指望任何属性都是可调用的。

    call_user_func($tokenMapper->tokenJoinHistories, $a);
    

    或者你像这样扩展你的映射器

    class Bar {
      public function __call ($name, $args) {
        if (isset($this->$name) && is_callable($this->$name)) {
          return call_user_func_array($this->$name, $args);
        } else {
          throw new Exception("Undefined method '$name'");
        } 
      }
    }
    

    (这个快速编写的示例中可能存在一些问题)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-07
      • 2012-02-06
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      相关资源
      最近更新 更多