2010-05-11 19 views
5

Ceci est le manuel php: http://us.php.net/manual/en/language.constants.syntax.phpExiste-t-il une option de configuration en PHP pour éviter que les constantes non définies soient interprétées comme des chaînes?

Si vous utilisez une constante non définie, PHP suppose que vous voulez dire le nom de la constante elle-même, comme si vous l'avez appelé comme une chaîne (CONSTANT vs « CONSTANT »). Une erreur de niveau E_NOTICE sera émise lorsque cela se produit.

Je n'aime vraiment pas ce comportement. Si je n'ai pas réussi à définir une constante requise, je préférerais que le script échoue pour que je sois forcé de le définir. Est-il possible de forcer PHP à planter le script s'il essaye d'utiliser une constante indéfinie?

Par exemple. Ces deux scripts font la même chose.

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

et

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

Je préfère le second script DIE et déclarer qu'il a essayé d'utiliser une constante DEBUG non définie.

Répondre

3

vous pouvez faire quelque chose (laid) comme ceci:

pseudo code:

/** 
* 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

Le code d'erreur pour l'utilisation d'une constante indéfinie semble être 8. – Tgr

+0

Thanks Tgr! J'ai changé la constante PHP en E_USER_NOTICE. – powtac

+0

+1 - Meilleure réponse que la mienne. Probablement une bonne idée de définir uniquement cette erreur lors du déboguage car elle dépend d'une vérification de sous-chaîne qui peut être lente (et peut donner des faux positifs). – Geoff

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

Je pense qu'il veut que l'avertissement puisse soulever une E_ERROR ... –

+0

Je sais que je pourrais le faire, mais j'espérais une solution plus élégante. @Byron Oui, je voudrais que PHP déclare et E_ERROR au lieu d'un E_NOTICE – mrbinky3000

1

Je ne pense pas qu'il y ait un moyen de changer le type d'erreur jeté, mais vous pouvez modifier l'erreur de déclaration à E_ALL en utilisant error_reporting de sorte que vous voyez ces erreurs tout en développant:

error_reporting(E_ALL); 
+0

Mais avec ceci un Avis reste un Avis! – powtac