Dans le développement de PHP, nous utilisons souvent des constantes pour définir certaines configurations globales, telles que les chemins, les commutateurs, les interfaces de service, etc., mais dans des architectures plus modernes ou modulaires, des réseaux de configuration (tels que Config.php ou .env Environment variables) remplacent progressivement un grand nombre d'utilisation constante globale. Pour lisser la migration ou effectuer des comparaisons de compatibilité, nous devrons peut-être comparer les constantes définies dans l'environnement d'exécution actuel pour voir si elles peuvent être remplacées par des valeurs dans le tableau de configuration.
À l'heure actuelle, la fonction get_defined_constants () est utile. Il peut renvoyer toutes les constantes définies (y compris les constantes système et définies par l'utilisateur) et les présenter dans un tableau, ce qui nous facilite pour effectuer un traitement logique.
Voici un exemple pratique qui montre comment comparer avec le tableau de configuration via get_defined_constants () et découvrir les pièces qui peuvent avoir des doublons ou des conflits.
<?php
// Simuler un tableau de configuration,Il est généralement possible de config.php ou env Chargement de fichiers
$config = [
'APP_ENV' => 'production',
'API_URL' => 'https://api.m66.net',
'DEBUG' => false,
];
// Supposons que certaines configurations sont à l'origine constantes
define('APP_ENV', 'production');
define('API_URL', 'https://api.m66.net');
define('SITE_NAME', 'MySite');
// Obtenez toutes les constantes définies par l'utilisateur
$userConstants = get_defined_constants(true)['user'];
// Utilisé pour stocker les résultats correspondants
$matched = [];
$unmatched = [];
$missingInConstants = [];
foreach ($config as $key => $value) {
if (array_key_exists($key, $userConstants)) {
if ($userConstants[$key] === $value) {
$matched[$key] = $value;
} else {
$unmatched[$key] = [
'constant' => $userConstants[$key],
'config' => $value
];
}
} else {
$missingInConstants[$key] = $value;
}
}
// Résultats de comparaison de sortie
echo "=== Éléments de configuration correspondants(Constant et la valeur sont cohérents) ===\n";
print_r($matched);
echo "\n=== 不Éléments de configuration correspondants(Le même nom mais des valeurs différentes) ===\n";
print_r($unmatched);
echo "\n=== Éléments qui existent dans la configuration mais ne sont pas définis comme des constantes ===\n";
print_r($missingInConstants);
Obtenez des constantes d'utilisateur:
get_defined_constants (true) ['utilisateur'] peut obtenir toutes les constantes définies par l'utilisateur, cette étape est la clé.
Logique comparative:
Itérer dans le tableau de configuration, vérifiez si chaque élément de configuration existe dans une constante et s'il existe, les valeurs de comparaison sont cohérentes.
Sortie de classification:
Les termes correspondants indiquent exactement qu'ils ont été conformes à la valeur de configuration via les constantes;
Un terme incompatible signifie qu'il y a un conflit potentiel;
Les entrées manquantes indiquent que ces configurations n'ont pas été déplacées vers des constantes ou ne sont pas intentionnellement définies comme des constantes.
Prise en charge de la migration: lorsque vous vous préparez à migrer des anciennes définitions constantes vers une structure de fichier de configuration unifiée, vous pouvez utiliser cette méthode pour confirmer quelles constantes ont été écrasées par le tableau de configuration.
Objectif de débogage: suivre la définition répétée des constantes et des configurations dans de grands projets pour empêcher les remplacements logiques et la confusion.
Vérification de l'environnement: Ce type de mécanisme de comparaison peut être intégré dans les scripts de déploiement automatisés pour s'assurer que les constantes et les fichiers de configuration prédéfinis sont cohérents.
En général, comparer get_defined_constants () avec des tableaux de configuration est une technique d'audit de code très pratique, en particulier pour une utilisation lors de la refactorisation des anciens projets. Si vous maintenez un projet PHP qui migre progressivement de la configuration constante à la configuration centralisée, cette méthode vous fera économiser beaucoup de temps de dépannage et de maintenance.