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