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 answers
Это связано с этим изменением в 7.1:
Исправления несоответствий в
$this
Хотя
$this
считается специальной переменной в PHP, ей не хватало надлежащих проверок, чтобы убедиться, что она не использовалась в качестве имени переменной или не была переназначена. Теперь это исправлено, чтобы гарантировать, что$this
не может быть определяемой пользователем переменной, переназначенной на другое значение или быть глобализированной.
Этот RFC объясняет это более подробно, хотя в нем также говорится:
Отключить возможность повторного назначения
$this
косвенно через$$
Попытка повторно назначить
$this
через$$
назначение приведет к возникновению исключения ошибки.$a = "this"; $$a = 42; // throw new Error("Cannot re-assign $this")
Все еще возможно прочитать значение
$this
через$$
.
(Курсив мой.)
isset
похоже, у него есть свое особое отношение к $$
для $this
, которое запрещает ему это видеть. Я не уверен, является ли это намеренным или побочным продуктом этих изменений.