【问题标题】:How to invoke a PHP closure which is assigned to a class variable?如何调用分配给类变量的 PHP 闭包?
【发布时间】:2015-07-02 17:50:15
【问题描述】:

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

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

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

如果类变量先赋值给普通变量然后执行:

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

然后一切正常。

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

【问题讨论】:

  • 为什么不使用静态函数呢?
  • 你的 PHP 版本是多少?
  • 我的PHP版本是5.3.10

标签: php class closures


【解决方案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 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2011-10-27
    • 2018-06-20
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多