2008-09-16 13 views
28

Normalmente uso E_ALL para ver cualquier cosa que PHP pueda decir sobre mi código para intentar mejorarlo.¿Cuál es la configuración de error_reporting() recomendada para el desarrollo? ¿Qué pasa con E_STRICT?

Acabo de notar un error constante E_STRICT, pero nunca lo he usado o escuchado, ¿es este un buen ajuste para usar en desarrollo? El manual dice:

Avisos de tiempo de ejecución. Habilítelo para que PHP sugiera cambios a su código que garantizarán la mejor interoperabilidad y compatibilidad de su código.

Así que me pregunto si estoy usando el mejor nivel error_reporting con E_ALL o habría que junto con E_STRICT ser el mejor? ¿O hay alguna otra combinación que aún deba aprender?

Respuesta

43

En PHP 5, las cosas cubiertas por E_STRICT no están cubiertos por E_ALL, por lo que para obtener el máximo de información, es necesario combinarlos:

error_reporting(E_ALL | E_STRICT); 

En PHP 5.4, E_STRICT se incluirá en E_ALL, por lo que puede usar simplemente E_ALL.

También puede utilizar

error_reporting(-1); 

que siempre permitirá a todos los errores. Cuál es más semánticamente correcto como:

error_reporting(~0); 
+1

Solo tenga en cuenta que con PHP> = 5.4 el E_STRICT está incluido en E_ALL – mTorres

+1

@hakre, no estoy seguro de entender su edición en esta respuesta.Está claramente implicando que en "sistemas esotéricos", es posible que '-1! = ~ 0'. ¿Qué son estos sistemas esotéricos, y realmente existen? ¿Tendría razón para adivinar que los enteros de PHP se almacenan en cualquier formato que use el compilador de C para compilar PHP, y que está pensando en un escenario hipotético en el que alguien compila PHP en, por ejemplo, un compilador C de complemento? De todos modos, ¿no sería mejor simplemente modificar el fragmento de código de Gordon que dejar lo que efectivamente es una edición "en realidad, el último párrafo es incorrecto"? –

+1

-1 es un número, - un operador numérico. dependiendo de cómo se manejen los enteros negativos, puede representar ~ 0 pero no debe. Donde no lo hace, esos son los sistemas que denominé "esotéricos". Lo que técnicamente está mal es que quiera usar el operador de bits ~ en lugar de un operador numérico. Consulte http://stackoverflow.com/questions/1967360/what-does-this-operator-mean-here esto es lo que normalmente desea expresar. Entonces, el código es menos incorrecto al usar la expresión más correcta. Y sí, lo he experimentado una vez. Pero eso es hace un momento, la última vez que me preguntaron que ya no podía reproducir desde mi mente. – hakre

-1

ini_set ("display_errors", "2"); ERROR_REPORTING (E_ALL);

+0

bien, los nombres de función de PHP son sensibles a mayúsculas, sino que más bien debería usarlo de la manera en que se debe utilizar (por ejemplo 'error_reporting (E_ALL | E_STRICT)', donde el nombre de la función no está escrito con letras mayúsculas). Por cierto, 'E_ALL' no contiene' E_STRICT' en versiones de PHP menores que 5.4. – Sk8erPeter

5

En mi opinión, cuanto más alto establezca el nivel de informe de errores en la fase de desarrollo, mejor.

En un entorno directo, desea un conjunto reducido (pero solo ligeramente) reducido, pero desea que se registre en algún lugar que no pueda ser visto por el usuario (prefiero syslog).

http://php.net/error_reporting

E_ALL | E_STRICT para el desarrollo con PHP 5.2.0 antes.

5.2 introduce E_RECOVERABLE_ERROR y 5.3 introduce E_DEPRECATED y E_USER_DEPRECATED. Probablemente quieras activarlos si estás ejecutando una de esas versiones.

Si desea utilizar números mágicos que sólo podría establecer el valor error_reporting a algunos bastante alto valor de 2^n-1 - dicen, 16777215, y que sería en realidad sólo abra todos los bits entre 1..n. Pero no creo que el uso de números mágicos sea una buena idea ...

En mi opinión, PHP ha dejado caer la bola un poco teniendo E_ALL realmente no es todo. Pero parece ser que va a ser fijado en PHP 6 ...

2

En las versiones más nuevas de PHP, E_ALL incluye más clases de errores. Desde PHP 5.3, E_ALL incluye todo excepto E_STRICT. En PHP 6, incluso incluirá eso.Esta es una buena sugerencia: es mejor ver más mensajes de error en lugar de menos.

Lo que está incluido en E_ALL está documentado en la página PHP predefined constants del manual en línea.

Personalmente, creo que no importa mucho si usa E_STRICT. Ciertamente no le hará daño, especialmente porque puede evitar que escriba scripts que tienen una pequeña posibilidad de romperse en versiones futuras de PHP. Por otro lado, en algunos casos, los mensajes estrictos pueden ser demasiado ruidosos, tal vez especialmente si tiene prisa. Sugiero que lo enciendas por defecto y lo apagues cuando se vuelva molesto.

+0

E_STRICT está incluido en E_ALL desde 5.4. –

1

Dependiendo de sus planes de soporte a largo plazo para este código, la depuración con E_STRICT habilitado puede ayudar a que su código continúe funcionando en un futuro lejano, pero probablemente sea excesivo para el uso diario. Hay dos cosas importantes acerca de E_STRICT a tener en cuenta:

  1. Per the manual, más E_STRICT se generan errores en tiempo de compilación, no en tiempo de ejecución. Si está aumentando el nivel de error a E_ALL dentro de su código (y no a través de php.ini), es posible que nunca vea los errores E_STRICT de todos modos.
  2. E_STRICT está contenido dentro de E_ALL bajo PHP 6, pero no bajo PHP 5. Si actualiza su servidor para PHP6, y tienen E_ALL configurado como se describe en el apartado 1 anterior, usted comenzará a ver E_STRICT errores sin necesidad de cambios adicionales en tu parte.
+0

E_STRICT está incluido en E_ALL a partir de 5.4. no PHP 6 – Lee

0

No es estrictamente hablando de error_reporting, me fuertemente sugieren el uso de cualquier IDE que muestra automáticamente errores de análisis y problemas técnicos comunes (por ejemplo, misiones en condiciones).

Zend Studio para Eclipse tiene esta característica habilitada por defecto, y desde que comencé a usarlo, me ha estado ayudando mucho a detectar errores antes de que ocurran.

Por ejemplo, tenía este fragmento de código en el que almacenaba algunos datos en la variable $GLOBALS, pero inadvertidamente escribí $_GLOBALS. Los datos nunca se almacenaron en caché, y nunca supe si Zend no me dijo: "Oye, esta cosa $_GLOBALS aparece solo una vez, eso podría ser un error".

10

Utilice el siguiente en php.ini:

error_reporting = E_ALL | E_STRICT 

también debe instalar Xdebug, se puede resaltar sus errores en el cegamiento colores brillantes e imprimir información detallada útil.

Nunca deje ningún error o aviso en su código, incluso si es inofensivo.

2

Es posible utilizar error_reporting = -1
Siempre estará formado por todos los bits (incluso si no están en E_ALL)

Cuestiones relacionadas