2008-12-01 10 views
1

En PHP, en fonction de votre niveau de rapport d'erreur, si vous ne définissez pas une constante, puis appelez-le comme suit:Je veux optimale Vérifiez Constantes définies en PHP

<?= MESSAGE ?> 

Il peut imprimer le nom de la constante au lieu de la valeur!

Donc, j'ai écrit la fonction suivante pour contourner ce problème, mais je voulais savoir si vous connaissez un moyen de le faire dans le code plus rapide? Je veux dire, quand j'ai fait un test de vitesse sans cette fonction, je peux définir et vider 500 constantes en 0,0073 secondes. Mais utilisez cette fonction ci-dessous, et cela passe de 0,0159 à 0,0238 secondes. Donc, ce serait génial d'abaisser les microsecondes aussi petit que possible. Et pourquoi? Parce que je veux l'utiliser pour modéliser. Je pense qu'il doit simplement y avoir un meilleur moyen que de basculer le rapport d'erreurs avec toutes les variables que je veux afficher.

function C($constant) { 
    $nPrev1 = error_reporting(E_ALL); 
    $sPrev2 = ini_set('display_errors', '0'); 
    $sTest = defined($constant) ? 'defined' : 'not defined'; 
    $oTest = (object) error_get_last(); 
    error_reporting($nPrev1); 
    ini_set('display_errors', $sPrev2); 
    if (strpos($oTest->message, 'undefined constant')>0) { 
     return ''; 
    } else { 
     return $constant; 
    } 
} 

<?= C(MESSAGE) ?> 
+0

Vous pouvez désactiver le rapport d'erreurs plus simplement en utilisant l'opérateur "@", mais en interne il fait la même chose, donc c'est encore très lent. – Greg

+0

Sûrement cela ne fonctionnera pas - si MESSAGE n'est pas défini alors l'avis sera généré avant même que vous n'atteigniez la fonction C(), et C() serait juste passé 'MESSAGE' –

+0

aussi pourrais-je demander pourquoi vous utilisez un constante à cet effet? –

Répondre

-2

essayer

if (isset(constant($constant)) ...

Cela ne devrait pas déclencher des messages E_NOTICE, de sorte que vous ne devez pas activer et de désactiver error_reporting.

+1

Si vous exécutez ce code (oh, et ajoutez un autre parent à la fin), vous obtenez une erreur "ne peut pas utiliser la valeur de retour de fonction dans un contexte d'écriture" et se plaint de la constante ($ constante) isset(). –

5

Tant que vous ne me dérange pas l'utilisation des guillemets sur vos constantes, vous pouvez le faire:

function C($constant) { 
    return defined($constant) ? constant($constant) : 'Undefined'; 
} 

echo C('MESSAGE') . '<br />'; 

define('MESSAGE', 'test'); 

echo C('MESSAGE') . '<br />'; 

Sortie:

Undefined

essai

Sinon, il n'y a aucun moyen de contourner cela sans attraper le préavis lancé en utilisant un indéfini constante constante.

Questions connexes