Dans PHP, get_defined_constants () est une fonction très pratique qui renvoie un tableau de toutes les constantes actuellement définies, y compris les constantes définies par l'utilisateur et les constantes de système. Pendant le débogage ou le développement, nous l'utilisons souvent pour voir quelles constantes sont définies dans le projet. Cependant, à mesure que la taille du projet se développe, l'utilisation de cette fonction soulève également un problème:
get_defined_constants () est en fait une fonction intégrée qui analyse toutes les constantes dans le contexte d'exécution actuel, y compris toutes les extensions, les constantes système et les constantes définies par l'utilisateur. Lorsqu'elle est appelée, PHP itère en interne sur une table de hachage qui contient toutes les constantes et construit le résultat en un tableau associatif à retourner.
Au cours des projets à petite échelle ou du débogage du développement, les frais généraux de ces opérations sont négligeables. Mais dans les grands projets, en particulier lorsque le nombre de définitions constantes est très grande (comme des milliers de constantes), plusieurs appels pour get_defined_constants () auront les effets suivants:
Utilisation accrue du processeur : la construction d'une gamme complète de constantes peut prendre un certain temps de traitement.
La consommation de mémoire devient plus élevée : le tableau retourné est généralement très important et consomme plus de mémoire.
Difficulté à maintenir le code : Si la fonction est appelée fréquemment, il est facile de confondre les constantes qui vous tiennent vraiment à cœur pendant le débogage.
Afin de réduire les pertes de performances tout en garantissant une fonctionnalité complète, les meilleures pratiques suivantes pour utiliser get_defined_constants () sont recommandées:
Vous pouvez définir une constante de configuration, comme:
define('DEBUG_MODE', true);
Puis utilisez-le conditionnellement:
if (DEBUG_MODE) {
$constants = get_defined_constants(true); // Paramètres facultatifs true Classifier les constantes
print_r($constants['user']);
}
Cela garantit que get_defined_constants () n'est utilisé que pendant le débogage et n'apparaîtra pas dans la production.
Si vous avez besoin de lire des informations constantes lors de l'exécution, vous pouvez utiliser des mécanismes de mise en cache tels que APCU, redis ou cache de fichier pour réduire les frais généraux des appels répétés. Par exemple:
$cacheKey = 'defined_constants';
$constants = apcu_fetch($cacheKey);
if ($constants === false) {
$constants = get_defined_constants(true);
apcu_store($cacheKey, $constants, 300); // cache5minute
}
Cette approche convient aux environnements système où les constantes ne changent pas fréquemment, en particulier dans les grands CM ou les cadres.
Pour réduire la nécessité de traverser les constantes non pertinentes, il est recommandé de nommer des constantes personnalisées avec un préfixe uniforme, par exemple:
define('APP_CONFIG_DB_HOST', 'localhost');
define('APP_CONFIG_DB_PORT', 3306);
Lorsque vous appelez, il vous suffit de filtrer les constantes contenant le préfixe:
$userConstants = get_defined_constants(true)['user'];
$appConstants = array_filter($userConstants, function($key) {
return strpos($key, 'APP_CONFIG_') === 0;
}, ARRAY_FILTER_USE_KEY);
Cela évite le fardeau des performances du filtrage du système et les constantes d'extension.
Si vous organisez simplement des éléments de configuration ou des données, vous n'avez pas à utiliser de constantes. Utilisez des tableaux de configuration ou des constantes de classe pour être plus flexibles et évolutives:
class AppConfig {
const DB_HOST = 'localhost';
const DB_PORT = 3306;
}
Par rapport aux constantes mondiales, les constantes de classe conviennent plus à la conception modulaire et plus faciles à entretenir.
Dans le développement quotidien, l'utilisation de get_defined_constants () doit être contrôlée:
Ne l'utilisez pas à plusieurs reprises dans des boucles ou une logique d'appel haute fréquence.
Seules les constantes d'utilisateur sont accessibles après l'utilisation de la classification GET_DEFINED_CONSTANTS (True) .
Couplé à des commutateurs et des caches de débogage, il peut réduire considérablement l'impact des performances.
Résumé La gestion constante dans les classes de configuration et les fichiers de configuration est plus conforme à la structure de projet à grande échelle moderne.
get_defined_constants () est une fonction puissante mais facilement utilisée. Dans les grands projets PHP, la planification rationnellement de l'utilisation, de la fréquence et de la portée des constantes est la clé pour assurer la performance du projet et la maintenabilité. S'il est utilisé correctement, il peut toujours servir d'assistant de droite pour le débogage et la gestion de la configuration; Mais s'il est utilisé mal, en particulier dans le code commercial fréquemment appelé, il peut faire partie du goulot d'étranglement des performances.