2009-12-23 12 views
11

Al usar error_reporting() o ini_set('error_reporting') en mis scripts, ¿hay alguna diferencia de funcionalidad entre los dos? ¿Se prefiere un método al otro?Diferencia entre error_reporting() y ini_set ('error_reporting')?

Por lo que vale, veo muchos frameworks usando error_reporting(), pero parece que ambas opciones se configuran solo durante el tiempo de ejecución, luego restablecen a sus valores predeterminados en php.ini después de la ejecución del script.

Respuesta

8

La única diferencia funcional pequeña parece ser que ini_set vuelve false cuando era incapaz de cambiar el ajuste y error_reporting siempre devuelve el nivel de error de edad.

+3

No exactamente; ini_set devuelve falso cuando la configuración no existe. Espera una cadena, por lo que todo lo que se puede interpretar como una cadena se convierte. Si le pasa un Objeto, por ejemplo, PHP genera una advertencia y devuelve nulo, que es idéntico al comportamiento de error_reporting cuando pasa un objeto (un objeto sin un método __toString()). Siendo el punto, su pregunta fue la diferencia entre 'ini_set ('error_reporting')' y 'error_reporting()', no la forma en que 'ini_set()' maneja los errores en los nombres de las directivas. – Dereleased

+1

Debo aclarar, cuando digo "espera una cadena" me refiero al segundo parámetro, el valor de la configuración que se está configurando, y todo lo demás se refiere a eso. – Dereleased

+0

@Dereleased, creo que el retorno de ini_set falso se basa en la posibilidad de bloquear el cambio de algunas configuraciones en tiempo de ejecución en 'php.ini'.Así que supongo que si cambiar el nivel de error en el tiempo de ejecución está deshabilitado en php.ini (No estoy seguro si eso es posible, pero creo que es) ini_set() devolverá 'false' mientras' error_reporting'will, al menos de acuerdo con el manual , siempre devuelve el antiguo nivel de error. –

4

Son funcionalmente idénticos, pero si está utilizando un IDE que conoce los nombres de las funciones de PHP, esta es una manera fácil de asegurarse de no confundir accidentalmente el nombre de la directiva que está intentando establecer.

Desde la sección de ejemplos de PHP's Manual Entry for error_reporting():

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

Bah, mi IDE (notepad ++) los equivoca. Buena entrada, sin embargo. – Jeff

+1

En los últimos tiempos (es decir, durante los últimos seis años más o menos) solo he usado Komodo (90%) y jEdit, y ambos conocen estas funciones. – Dereleased

7

"Dos carreteras que conducen a Roma": ini_set ('error_reporting',) anula el conjunto de parámetros en el archivo php.ini. error_reporting() recibe número de nivel o valor de id nivel

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

Ambas opciones entran en vigor hasta que el script termina su ejecución. El siguiente usará los parámetros definidos en .ini, nuevamente.

+3

+1 porque no puedo aceptar dos respuestas. – Jeff

0

Además, a pesar de que los documentos indican que la firma de error_reporting es:

int error_reporting ([ int $level ]) 

, no es exactamente correcto, porque se puede establecer un string y leer de nuevo con ini_get:

error_reporting('123 hello world'); 

var_dump(ini_get('error_reporting')); 

produce:

string(15) "123 hello world" 

Así, error_reporting($x) es semánticamente equivalente a ini_set('error_reporting', $x),

y error_reporting() es semánticamente equivalente a (int)ini_get('error_reporting').

Cuestiones relacionadas