(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 7 Единый переменный синтаксис:
(self::$b)();
Или временная переменная в PHP 5+ (включая 7):
$init = self::$b;
$init();
Других решений пока нет …