Разница между error_reporting () и ini_set («error_reporting»)? - PullRequest
12 голосов
/ 23 декабря 2009

При использовании error_reporting() или ini_set('error_reporting') в моих скриптах, есть ли какие-либо функциональные различия между ними? Один метод предпочтительнее другого?

Что бы это ни стоило, я вижу много фреймворков, использующих error_reporting(), но оба параметра, похоже, устанавливаются только во время выполнения, а после выполнения скрипта возвращаются к значениям по умолчанию в php.ini.

Ответы [ 4 ]

9 голосов
/ 23 декабря 2009

Единственное небольшое функциональное различие заключается в том, что ini_set возвращает false, когда не удалось изменить настройку, а error_reporting всегда возвращает старый уровень ошибки.

7 голосов
/ 23 декабря 2009

«Две дороги, ведущие к Риму»: ini_set ('error_reporting',) переопределяет набор параметров в файле php.ini. error_reporting () получает номер уровня или идентификатор уровня

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

Обе опции вступают в силу, пока скрипт не завершит свое выполнение. Следующий будет снова использовать параметры, определенные в .ini.

4 голосов
/ 23 декабря 2009

Они функционально идентичны, но если вы используете IDE, которая знает имена функций PHP, это простой способ убедиться, что вы случайно не набрали неверно имя директивы, которую вы устанавливаете.

Из раздела примеров на Ручной ввод PHP для error_reporting():

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
0 голосов
/ 26 января 2015

Кроме того, хотя в документах указано, что подпись для error_reporting:

int error_reporting ([ int $level ] )

, это не совсем правильно, потому что вы можете установить string и прочитать его обратно с помощью ini_get:

error_reporting('123 hello world');

var_dump(ini_get('error_reporting'));

производит:

string(15) "123 hello world"

Итак, error_reporting($x) семантически эквивалентен ini_set('error_reporting', $x),

и error_reporting() семантически эквивалентны (int)ini_get('error_reporting').

...