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

时间:2015-07-02 17:50:16

标签: php class closures

将PHP闭包分配给静态类变量时,稍后执行,例如:

self::$FOO = function($a) {return $a;};
self::$FOO(123)

PHP警告“函数名称必须是字符串”。

如果首先将类变量分配给普通变量,则执行:

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

然后一切都好。

有没有办法直接使用类变量执行闭包,而不首先将它分配给普通变量?

1 个答案:

答案 0 :(得分:0)

您需要使用__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:)