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

В PHP 7.0:

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

Но в PHP 7.1:

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

кто-нибудь знает, почему это произошло?

6

Решение

Это связано с этим изменением в 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 который запрещает это видеть. Я не уверен, является ли это намеренным или побочным продуктом этих изменений.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]