В PHP 7.0:
$a = 'this';
return isset( $$a );
// returns true
Но в PHP 7.1:
$a = 'this';
return isset( $$a );
// returns false
кто-нибудь знает, почему это произошло?
Это связано с этим изменением в 7.1:
Несоответствие исправляет
$this
в то время как
$this
считается специальной переменной в PHP, в ней не хватало
надлежащие проверки, чтобы убедиться, что оно не использовалось в качестве имени переменной или
переназначены. Теперь это исправлено, чтобы обеспечить$this
не могу
быть пользовательской переменной, переназначенной на другое значение или
глобализованным.
Это RFC объясняет это более подробно, хотя также говорится:
Отключить возможность переназначения
$this
косвенно через$$
Попытка переназначить
$this
через$$
назначение приведет к
выдача ошибки исключения.$a = "this"; $$a = 42; // throw new Error("Cannot re-assign $this")
Читать еще можно
$this
значение через$$
,
(Акцент мой.)
isset
Кажется, у него есть свое особое отношение к $$
за $this
который запрещает это видеть. Я не уверен, является ли это намеренным или побочным продуктом этих изменений.
Других решений пока нет …