使 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();
(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();