Dans la programmation PHP, la fonction définie () est utilisée pour déterminer si une constante a été définie. Normalement, défini () devrait retourner faux si la constante n'est pas définie, autrement vrai . Mais parfois, les développeurs peuvent rencontrer une exception: une erreur définie () renvoie vrai lors de la jugement d'une constante non définie, ce qui entraînera une confusion dans la logique du programme et rendra difficile le dépannage des erreurs.
Cet article explorera les causes possibles de ce phénomène et fournira plusieurs solutions efficaces.
Exemple de code PHP:
<?php
if (defined('MY_CONST')) {
echo "MY_CONST Défini";
} else {
echo "MY_CONST Indéfini";
}
?>
Dans des circonstances normales, si My_Const n'est pas défini, le code ci-dessus doit sortir "My_Const Undefined". Cependant, dans certains environnements ou dans des contextes de code spécifiques, défini («my_const») reviendra de manière inattendue, mal jugeant que la constante a été définie.
Parfois, une constante peut être définie dans le programme par inadvertance, mais il existe des différences dans les espaces de nom, les cas en majuscules et en minuscules. Les noms constants en PHP sont sensibles à la casse. Si votre jugement est incompatible avec la définition, cela peut conduire à une erreur de jugement.
Certains cadres ou extensions peuvent définir les constantes dynamiquement ou utiliser des méthodes magiques pour créer automatiquement lors de l'accès à des constantes non définies, auquel cas défini () renvoie true .
Différentes versions de PHP peuvent différer dans le mécanisme de traitement constant, et certaines versions plus anciennes ou des configurations spécifiques peuvent entraîner le comportement anormalement défini () .
Utilisation d'abord définie () pour juger, puis utilisez constant () pour obtenir la valeur. Si une exception se produit, elle est considérée comme non définie:
<?php
function is_constant_defined($name) {
if (!defined($name)) {
return false;
}
try {
constant($name);
return true;
} catch (Error $e) {
return false;
}
}
if (is_constant_defined('MY_CONST')) {
echo "MY_CONST Défini";
} else {
echo "MY_CONST Indéfini";
}
?>
Confirmez qu'il n'y a pas de logique qui est automatiquement définie lors de l'accès aux constantes non définies. Désactiver ou écraser la logique si nécessaire.
La dernière version de PHP corrige de nombreux bogues liés à la constante et la mise à niveau de l'environnement PHP peut aider à éviter de tels problèmes.
Imprimez toutes les constantes définies pour afficher: print_r (get_defined_constants (true));
Nettoyez le cache avant de juger (si le mécanisme de cache est utilisé)
Utiliser défini ('my_const') === true au lieu d'un simple jugement pour éviter la confusion de type
L'erreur vraie renvoyée par défini () est généralement causée par une exception de logique d'environnement ou de code. En combinant les solutions ci-dessus, les développeurs peuvent vérifier à partir de divers aspects tels que les spécifications de code, les mises à niveau de l'environnement, la capture d'erreurs, etc. pour assurer la précision du jugement constant.