如何调用分配给类变量的PHP闭包?

3
当一个PHP闭包被赋值给一个静态类变量,然后稍后执行时,例如:
self::$FOO = function($a) {return $a;};
self::$FOO(123)

PHP警告"函数名称必须是一个字符串"。

如果类变量首先分配给一个普通变量,然后执行:

$bar = self::$FOO;
$bar(123);

然后一切都好了。

有没有一种方法可以直接使用类变量执行闭包,而不必先将其分配给普通变量?


2
为什么不使用静态函数呢? - Haensl
你的PHP版本是什么? - ficuscr
我的PHP版本是5.3.10。 - flymike
1个回答

1
你需要使用__invoke()来使用$foo()语法调用闭包。
一个简单的例子:
class MyClass {
  public static $closure;

  function myFunction() {
    self::$closure = function($a) { echo $a; };
    self::$closure->__invoke(123);
  }
}

$class = new MyClass;
$class->myFunction();

这将打印出 123 :)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接