2010-05-11 6 views
5

Se trata del manual de php: http://us.php.net/manual/en/language.constants.syntax.php¿Hay una opción de configuración en PHP para evitar que las constantes indefinidas se interpreten como cadenas?

Si utiliza una constante definida, PHP asume que quiere decir el nombre de la misma constante, al igual que si se llama como una cadena (constante vs "constante") Se producirá un error de nivel E_NOTICE cuando esto ocurra.

Realmente no me gusta este comportamiento. Si no he podido definir una constante requerida, preferiría que el script fallara, por lo que me veo forzado a definirlo. ¿Hay alguna forma de obligar a PHP a bloquear el script si intenta usar una constante indefinida?

Por ejemplo. Ambos scripts hacen lo mismo.

<?php 
define('DEBUG',1); 
if (DEBUG) echo('Yo!'); 
?> 

y

<?php 
if(DEBUG) echo('Yo!'); 
?> 

yo más bien el segundo dado guión y declarar que se trató de utilizar un DEBUG constante indefinida.

Respuesta

3

Se podía hacer algo (feo) de esta manera:

seudo código:

/** 
* A Notice becomes an Error :) 
*/ 
function myErrorHandler($errno, $errstr, $errfile, $errline) { 
    if ($errno == E_NOTICE) { // = 8 
     if (substr($errstr ...)) { // contains something which looks like a constant notice... 
      trigger_error('A constant was not defined!', E_USER_ERROR); 
     } 
    } 
} 
set_error_handler("myErrorHandler"); 
+0

El código de error para usar una constante indefinida parece ser 8. – Tgr

+0

Gracias Tgr! Cambié la constante de PHP a E_USER_NOTICE. – powtac

+0

+1 - Mejor respuesta que la mía. Probablemente sea una buena idea configurar solo este error al realizar la depuración, ya que depende de una comprobación de subcadena que puede ser lenta (y puede dar algunos falsos positivos). – Geoff

1
if(!defined('DEBUG')) die('failed.'); 
+0

Creo que quiere elevar la advertencia a un E_ERROR ... –

+0

Sé que podría hacer eso, pero que estaba esperando una solución más elegante. @Byron Sí, me gustaría que PHP declare y E_ERROR en lugar de un E_NOTICE – mrbinky3000

1

No creo que hay una manera de cambiar el tipo de error que se produce, pero se puede cambiar el informe de errores a E_ALL usando error_reporting para que veas estos errores durante el desarrollo:

error_reporting(E_ALL); 
+0

¡Pero con esto un Aviso sigue siendo un Aviso! – powtac

Cuestiones relacionadas