превращение статического члена класса в функцию (замыкание) не работает

(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 быть строкой (имя функции для вызова).
Если я использую чистые переменные, а не статические члены, это будет работать.
Мой вопрос, это должно сработать, или нет, или есть небольшой твик, который я могу сделать, чтобы это сработало без чистых переменных?

4

Решение

Вы можете использовать PHP 7 Единый переменный синтаксис:

(self::$b)();

Или временная переменная в PHP 5+ (включая 7):

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

Как видно на 3v4l.org.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]