如何调用分配给 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
:)
当一个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
:)