it-swarm.com.ru

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

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

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

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

59
jantimon

Вид. Вы можете активировать уровень E_NOTICE в своем отчете об ошибках . (Список констант здесь .)

Каждый случай использования необъявленной переменной выдает E_NOTICE.

Ошибка E_STRICT livel также выдаст эти уведомления, а также другие советы о том, как оптимизировать ваш код.

error_reporting(E_STRICT);

Завершение работы скрипта 

Если вы действительно серьезны и хотите, чтобы ваш сценарий прекращается вместо того, чтобы просто выводить уведомление при обнаружении необъявленной переменной, вы можете создать специальный обработчик ошибок

Рабочий пример, который обрабатывает только 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

 ?>
65
Pekka 웃

Использование

error_reporting(-1);

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

( Ссылка )

36
Gordon

Да, введите error_reporting(E_STRICT|E_ALL); в начале вашего скрипта.

3
chelmertz

Вы можете проверить error_reporting , и не забудьте также установить display_errors . Обратите внимание, что существует несколько уровней сообщений об ошибках. 

2
gblazex

Через несколько лет php 7.0.0 получил declare(strict_types=1);

http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.strict

2
Full

PHP is предупреждает о необъявленных переменных по умолчанию, вам просто нужно повысить уровень report error , чтобы вы увидели уведомления. Обратите внимание, что, поскольку нет специального синтаксиса для объявления переменной в PHP, и вы просто объявляете ее, присваивая ей, он может предупредить вас только при попытке использовать значение необъявленной переменной. В отличие от других языков, «присваивания необъявленным переменным» не существуют, поэтому PHP не может вас там предупредить.

1
deceze

Использование

error_reporting(E_ALL);

в начале вашего кода PHP . Или установите параметр error_reporting в файле php.ini, чтобы установить его для всех файлов PHP

1
JochenJung

Вы можете реализовать свою собственную функцию обработки ошибок с помощью set_error_handler() .

Затем вы можете реагировать на определенные уровни ошибок, как вы хотите.

Например, вместо того, чтобы просто показывать и регистрировать сообщение об ошибке, вы можете завершить сценарий, если переменная не объявлена ​​должным образом или если выполнено какое-либо условие, которое вам не нравится.

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

1
selfawaresoup

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

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

0
Vincent

Да, вы делаете это с сообщениями об ошибках.

http://www.php.net/manual/en/function.error-reporting.php

0
Palantir