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

Строгий режим в PHP?

Другие языки с объявлением автоматической переменной - например, Perl - имеют строгий режим.

При активации этого строгого режима требуется объявление переменной, и Perl выдает ошибку, как только вы пытаетесь использовать необъявленную переменную.

Предлагает ли PHP какую-либо аналогичную функцию?

4b9b3361

Ответ 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.

(Ссылка)

Ответ 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.

Ответ 10

Я бы предположил, что требования к отчетности и обработке ошибок различаются в пределах вашей среды разработки и вашей живой производственной среды (WWW, Intranet компании и т.д.). Во время разработки вы захотите увидеть как можно больше деталей, чтобы найти и исправить проблемы.

В живой среде я думаю, что вы не хотите показывать сообщения об ошибках PHP пользователям, а разрешите script продолжать работу с уменьшенной функциональностью (например, сообщение типа "Извините, мы не можем обновить ваш профиль в момент" или перенаправить пользователя на домашнюю страницу и т.д.). Одним из способов достижения этой цели было бы использование пользовательских обработчиков ошибок для каждой среды

Ответ 11

Ответ 2019 года на этот старый вопрос,

Да, вы можете с PHP 7.X и далее,

declare(strict_types=1);

Это приведет к тому, что все объявления скалярных типов будут строго соответствовать типам.

Но если вы включите это глобально, это может повлиять на другие сторонние модули (например, библиотеки Composer), которые полагаются в слабом режиме, поэтому убедитесь, что это применяется в соответствующих классах/файлах.