Dans la programmation PHP, les constantes sont des identificateurs qui ne peuvent pas être modifiés pendant l'exécution et sont souvent utilisés pour les déclarations de paramètres de configuration ou les valeurs fixes. Lorsque nous développons de grandes applications ou déboguez des bibliothèques tierces, nous devons parfois détecter les constantes définies ou modifiées dans un certain morceau de code. À l'heure actuelle, la fonction get_defined_constants () est utile.
get_defined_constants () est une fonction intégrée PHP qui renvoie toutes les constantes actuellement définies et leurs valeurs correspondantes. En appelant la fonction avant et après l'exécution du code et la comparaison, nous pouvons capturer avec précision les constantes nouvellement ajoutées, et vérifier encore plus les valeurs de ces constantes.
array get_defined_constants ([ bool $categorize = false ] )
Si le paramètre de catégorisation $ est défini sur true , le tableau retourné sera regroupé en fonction de la classification des constantes (telles que le noyau, défini par l'utilisateur, etc.);
Sinon, renvoyez un tableau associatif unidimensionnel plat, la clé est le nom de la constante et la valeur est la valeur de la constante.
Nous pouvons ajouter les nouvelles constantes dans le code intermédiaire en appelant get_defined_constants () une fois avant et après un certain morceau de code, puis en comparant les différences entre les deux tableaux.
Voici un exemple complet:
<?php
// Enregistrer l'état constant initial
$before = get_defined_constants();
// Simuler le chargement des fichiers ou des bibliothèques de configuration tiers
include 'http://m66.net/sample-config.php'; // Exemple URL
// Enregistrez l'état des constantes après le chargement
$after = get_defined_constants();
// Calculer les nouvelles constantes
$new_constants = array_diff_assoc($after, $before);
// De nouvelles constantes sont ajoutées à la sortie
echo "Les nouvelles constantes sont les suivantes:\n";
foreach ($new_constants as $name => $value) {
echo "$name => " . var_export($value, true) . "\n";
}
Dans cet exemple, nous utilisons array_diff_assoc () pour comparer les différences entre deux tableaux, qui comparent non seulement les noms de clés, mais aussi les valeurs de clés. Cela vous permet d'obtenir exactement ces constantes nouvellement définies , plutôt que des constantes existantes dont les valeurs sont modifiées.
Si vous souhaitez uniquement obtenir des constantes définies par l'utilisateur, vous pouvez ajouter des paramètres de classification lorsque vous appelez get_defined_constants (true) et extraire les constantes dans la catégorie "utilisateur" à partir de celui-ci. Par exemple:
$before = get_defined_constants(true)['user'] ?? [];
include 'http://m66.net/sample-config.php';
$after = get_defined_constants(true)['user'] ?? [];
$new_constants = array_diff_assoc($after, $before);
foreach ($new_constants as $name => $value) {
echo "$name => " . var_export($value, true) . "\n";
}
Cette méthode convient particulièrement aux scénarios où les constantes par défaut du système doivent être exclues et peuvent se concentrer sur la capture de nouvelles définitions dans la logique utilisateur ou métier.
Débogage des bibliothèques tierces : analyser ce que les constantes sont introduites par une bibliothèque ou un cadre;
Suivi de configuration : position de position en double ou en conflit définie dans plusieurs fichiers de configuration;
Audit de sécurité : surveiller si des constantes anormales sont injectées avec malveillance;
Test et vérification : comparaison des différences d'état avant et après dans le processus de test automatique.
Une fois qu'une définition constante ne peut pas être modifiée, les définitions répétées provoqueront un avertissement;
Il est recommandé d'utiliser le préfixe de l'espace de noms pour éviter de nommer les conflits;
Évitez la génération dynamique d'un grand nombre de constantes dans la logique de base, sinon cela affectera la maintenabilité du code;