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! ==")
Ответы
Ответ 1
isset()
- это языковая конструкция, а не функция, поэтому, возможно, этот абзац (из http://php.net/manual/en/migration70.incompatible.php) применяется:
PHP 7 теперь использует абстрактное синтаксическое дерево при разборе исходных файлов. Это позволило значительно улучшить язык, который ранее был невозможным из-за ограничений в парсере, используемых в более ранних версиях PHP, но привел к удалению нескольких особых случаев по причинам согласованности, что привело к разрыву обратной совместимости.