PHP - Почему разные версии PHP возвращают разные результаты, когда я использую $ this в качестве динамической переменной в isset ()? - PullRequest
0 голосов
/ 25 июня 2018

В PHP 7.0:

$a = 'this';
return isset( $$a );
// returns true

Но в PHP 7.1:

$a = 'this';
return isset( $$a );
// returns false

Кто-нибудь знает, почему это происходит?

1 Ответ

0 голосов
/ 25 июня 2018

Это связано с этим изменением в 7.1:

Исправлены несоответствия $this

Хотя $this считается специальной переменной в PHP, ей не хватало надлежащие проверки, чтобы убедиться, что оно не использовалось в качестве имени переменной или переназначены. Теперь это исправлено, чтобы гарантировать, что $this не может быть пользовательской переменной, переназначенной на другое значение или глобализованным.

http://php.net/manual/en/migration71.other-changes.php#migration71.other-changes.inconsistency-fixes-to-this

Этот RFC объясняет это более подробно, хотя также говорится:

Отключить возможность переназначения $this косвенно через $$

Попытка переназначить присвоение с $this по $$ приведет к исключение ошибки.

$a = "this";
$$a = 42; // throw new Error("Cannot re-assign $this")

Все еще можно прочитать значение $this через $$.

(Акцент мой.)

isset, кажется, имеет собственную особую обработку $$ для $this, которая запрещает его видеть. Я не уверен, является ли это намеренным или побочным продуктом этих изменений.

...