PHP 8.4: Константа E_STRICT объявлена устаревшей
E_STRICT
были преобразованы в E_NOTICE
начиная с PHP 8.0, в PHP 8.4 константа E_STRICT
объявлена устаревшей.Все ошибки, предупреждения и уведомления в PHP имеют уровень ошибки, и с помощью функций error_reporting
и set_error_handler
PHP приложения могут контролировать, о каких ошибках сообщается, и переопределять поведение обработки ошибок по умолчанию с помощью обратного вызова.
PHP имеет широкий диапазон уровней ошибок, причём константа E_ALL
является битовой маской OR
всех констант E_
, что означает установку сообщения об ошибках или обработчика ошибок для сообщения/обработки всех ошибок, предупреждений и уведомлений.
Одним из уровней ошибок, ранее выдаваемых PHP, был E_STRICT
, когда код не был строго
корректным, чтобы обеспечить совместимость и дальнейшее развитие. В PHP 7.0 большинство существующих предупреждений E_STRICT
были преобразованы в E_NOTICE
, а начиная с PHP 8.0 все предупреждения E_STRICT
были преобразованы в E_NOTICE
.
Поскольку все уведомления E_STRICT
были преобразованы в E_NOTICE
начиная с PHP 8.0, в PHP 8.4 константа E_STRICT
объявлена устаревшей.
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT); // Constant E_STRICT is deprecated
Предлагаемая замена
Ядро PHP и расширения ядра, начиная с PHP 8.0 и более поздних версий, вообще не выдают уведомлений E_STRICT
. Можно с уверенностью предположить, что все PHP приложения, работающие на PHP 8.0 и более поздних версиях, никогда не столкнутся с уведомлениями E_STRICT
, а отчёты и обработка ошибок могут быть безопасно обновлены для игнорирования уведомлений E_STRICT
.
-error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
+error_reporting(E_ALL & ~E_DEPRECATED);
В PHP 7 до версии PHP 7.4 следующие функции условно выдают уведомления E_STRICT
:
htmlentities
mysqli_next_result
mysqli_stmt_next_result
PHP приложения, поддерживающие PHP 7.3 или более ранние версии, могут условно вызывать функции error_reporting
и set_error_handler
с соответствующими уровнями ошибок:
-error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
+if (PHP_VERSION_ID >= 70400) {
+ error_reporting(E_ALL & ~E_DEPRECATED);
+}
+else {
+ error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
+}
Изменение значения константы E_ALL
В PHP 8.4 присвоенное значение константы E_ALL
изменилось с 32767
на 30719
.
Влияние на обратную совместимость
Константа E_STRICT
объявлена устаревшей в PHP 8.4. Теперь использование этой константы в любом месте PHP кода приводит к появлению уведомления об устаревании в PHP 8.4 и более поздних версиях.
В PHP 9.0 константа E_STRICT
будет удалена.
Пользовательские обработчики ошибок и элементы управления отчётами об ошибках, выборочно исключающие уведомления E_STRICT
, можно настроить на игнорирование уведомлений E_STRICT
, чтобы избежать уведомления об устаревании.