Разница между error_reporting() и ini_set ('error_reporting')?

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

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

Ответ 1

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

Ответ 2

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

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

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

Ответ 3

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

В разделе примеров PHP Manual Entry для error_reporting():

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

Ответ 4

Кроме того, хотя документы заявили, что подпись для 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').