使一个类的static-member成为一个函数(闭包)不起作用

时间:2016-08-29 17:01:07

标签: php lambda functional-programming php-7

(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是一个字符串(要调用的函数名)。
如果我使用纯变量而不是静态成员,它将起作用 我的问题是,这是假设是否有效,或者是否有一个小的调整,我可以做这个工作没有纯粹的vars

1 个答案:

答案 0 :(得分:5)

您可以使用PHP 7 Uniform Variable Syntax

(self::$b)();

或PHP 5+中的临时变量(包括7):

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

As seen on 3v4l.org