对象方法的匿名函数

时间:2011-07-21 12:08:56

标签: php anonymous-function

  

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

为什么在PHP中无法实现这一点?我希望能够为特定对象动态创建一个函数。

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

2 个答案:

答案 0 :(得分:2)

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

你必须改为

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

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

答案 1 :(得分:0)

使用$obj->foo()调用方法,但是您希望将属性称为函数/方法。这只会混淆解析器,因为他没有找到名为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'");
    } 
  }
}

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