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

How to invoke a PHP closure which is assigned to a class variable?

当一个PHP闭包赋值给一个静态class变量,然后在后面执行,如:

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

PHP 警告 "the function name must be a string".

如果class变量先赋值给一个普通变量然后执行:

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

那一切就OK了

有没有办法直接使用 class 变量执行闭包,而无需先将其分配给普通变量?

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