使 class 的静态成员成为函数(闭包)不起作用

making a class's static-member a function (closure) does not work

(PHP7) 考虑下面的代码,它试图将一个函数分配给一个变量,然后确保它只被调用一次。

class a{
  static public $b;
  static public function init(){
     self::$b();
     self::$b=function(){};
  }
}
a::$b=function(){echo 'Here I do very heavy stuff, but will happen only in the first time I call init()';};

for($i=0;$i<1000;$i++){
   a::init();
}

在php7中它会给出一个错误,它期望a::$b是一个字符串(要调用的函数名)。
如果我使用纯变量而不是静态成员,它会起作用。
我的问题是,这是否可以工作,或者我可以做一个小的调整来使它工作 without pure vars?

您可以使用 PHP 7 Uniform Variable Syntax:

(self::$b)();

或者PHP中的临时变量5+(含7):

$init = self::$b;
$init();

As seen on 3v4l.org.