【发布时间】:2016-08-29 17:01:06
【问题描述】:
(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 是一个字符串(要调用的函数名)。
如果我使用纯变量而不是静态成员,它将起作用。
我的问题是,这是否可以工作,或者我可以做一些小的调整以使其工作没有纯变量?
【问题讨论】:
-
此代码在 PHP 5 或 PHP 7 中都不起作用。
-
是的,我知道,但不应该吗? (即错误或功能请求?)
-
这不是错误。它在 PHP 5 中从未工作过。当您正确使用统一变量语法时,它将在 PHP 7 中工作。即
(self::$b)() -
这可能是关于统一变量语法的一件事,不幸的是不会向后兼容 PHP 5。
-
我在两周内完成了 php5 :-)
标签: php lambda functional-programming php-7