Подтвердить что ты не робот

isset фатальная ошибка в 5.6, но штраф в 7

Этот фрагмент кода вызывает фатальную ошибку PHP в 5.6, но отлично работает в 7.0 и выше. Не существует документально подтвержденного изменения isset что я мог бы сказать, что он работает с массивами как константы.

<?php
class Test
{
    const A = [1];
}

echo isset(Test::A[0]);

Кто-нибудь знает какую-либо документацию о том, что это было фактическое изменение? Можно ли использовать isset с массивами в качестве констант?

Ошибка PHP 5.6.30:

Неустранимая ошибка: нельзя использовать isset() в результате выражения (вместо этого вы можете использовать выражение "null! ==")

4b9b3361

Ответ 1

isset() - это языковая конструкция, а не функция, поэтому, возможно, этот абзац (из http://php.net/manual/en/migration70.incompatible.php) применяется:

PHP 7 теперь использует абстрактное синтаксическое дерево при разборе исходных файлов. Это позволило значительно улучшить язык, который ранее был невозможным из-за ограничений в парсере, используемых в более ранних версиях PHP, но привел к удалению нескольких особых случаев по причинам согласованности, что привело к разрыву обратной совместимости.