Строгий режим в PHP?
Другие языки с объявлением автоматической переменной - например, Perl - имеют строгий режим.
При активации этого строгого режима требуется объявление переменной, и Perl выдает ошибку, как только вы пытаетесь использовать необъявленную переменную.
Предлагает ли PHP какую-либо аналогичную функцию?
Ответы
Ответ 1
Вид. Вы можете активировать уровень E_NOTICE
в своем отчете об ошибках. (Список констант здесь.)
Каждый случай использования необъявленной переменной E_NOTICE
.
E_STRICT
ошибок E_STRICT
выдаст эти уведомления, а также другие советы о том, как оптимизировать ваш код.
error_reporting(E_STRICT);
Завершение сценария
Если вы действительно серьезны и хотите, чтобы ваш скрипт завершал работу, а не просто выводил уведомление при обнаружении необъявленной переменной, вы можете создать собственный обработчик ошибок.
Рабочий пример, который обрабатывает только E_NOTICE
с "неопределенной переменной" в них и передает все остальное в обработчик ошибок PHP по умолчанию:
<?php
error_reporting(E_STRICT);
function terminate_missing_variables($errno, $errstr, $errfile, $errline)
{
if (($errno == E_NOTICE) and (strstr($errstr, "Undefined variable")))
die ("$errstr in $errfile line $errline");
return false; // Let the PHP error handler handle all the rest
}
$old_error_handler = set_error_handler("terminate_missing_variables");
echo $test; // Will throw custom error
xxxx(); // Will throw standard PHP error
?>
Ответ 2
Использование
error_reporting(-1);
чтобы показать все возможные ошибки, включая E_STRICT
и даже когда новые уровни и константы добавляются в будущих версиях PHP.
(Ссылка)
Ответ 3
Через несколько лет php 7.0.0 получил declare(strict_types=1);
http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.strict
Ответ 4
Да, введите error_reporting(E_STRICT|E_ALL);
в начале вашего script.
Ответ 5
Вы можете проверить error_reporting
и не забудьте установить display_errors
.
Обратите внимание, что существует несколько уровней отчетов об ошибках.
Ответ 6
PHP предупреждает о необъявленных переменных по умолчанию, вам просто нужно повернуть отчет об ошибках, чтобы вы увидели уведомления. Обратите внимание, что, поскольку нет специального синтаксиса для объявления переменной в PHP, и вы просто объявляете ее, назначая ей, она может только предупредить вас, когда вы пытаетесь использовать значение необъявленной переменной. В отличие от других языков, "присвоения необъявленным переменным" не существует, поэтому PHP не может вас предупредить.
Ответ 7
Использование
error_reporting(E_ALL);
в начале вашего PHP-кода.
Или установите параметр error_reporting в файле php.ini, чтобы установить его для всех файлов PHP
Ответ 8
Вы можете реализовать свою собственную функцию обработки ошибок с помощью set_error_handler()
.
Затем вы можете отреагировать на определенные уровни ошибок, как вы пожелаете.
Например, вместо того, чтобы просто показывать и регистрировать сообщение об ошибке, вы можете прервать script, если переменная не объявлена должным образом или если выполнено какое-либо условие, которое вам не нравится.
Таким образом, вы можете применять очень строгую политику для любого кода, который выполняется на вашем экземпляре интерпретатора PHP.
Ответ 9
Да, вы делаете это с отчетами об ошибках.
http://www.php.net/manual/en/function.error-reporting.php
Ответ 10
Я бы предположил, что требования к отчетности и обработке ошибок различаются в пределах вашей среды разработки и вашей живой производственной среды (WWW, Intranet компании и т.д.). Во время разработки вы захотите увидеть как можно больше деталей, чтобы найти и исправить проблемы.
В живой среде я думаю, что вы не хотите показывать сообщения об ошибках PHP пользователям, а разрешите script продолжать работу с уменьшенной функциональностью (например, сообщение типа "Извините, мы не можем обновить ваш профиль в момент" или перенаправить пользователя на домашнюю страницу и т.д.). Одним из способов достижения этой цели было бы использование пользовательских обработчиков ошибок для каждой среды
Ответ 11
Ответ 2019 года на этот старый вопрос,
Да, вы можете с PHP 7.X и далее,
declare(strict_types=1);
Это приведет к тому, что все объявления скалярных типов будут строго соответствовать типам.
Но если вы включите это глобально, это может повлиять на другие сторонние модули (например, библиотеки Composer), которые полагаются в слабом режиме, поэтому убедитесь, что это применяется в соответствующих классах/файлах.