Position actuelle: Accueil> Derniers articles> Comment obtenir des constantes sous un espace de noms via la fonction get_defined_constants? Techniques pratiques et solutions de contournement

Comment obtenir des constantes sous un espace de noms via la fonction get_defined_constants? Techniques pratiques et solutions de contournement

M66 2025-06-27

Dans le développement de PHP, les constantes sont souvent utilisées pour configurer des paramètres, des valeurs d'état et d'autres données qui ne sont pas destinées à être modifiées lors de l'exécution du programme. Depuis PHP 5.3, l'introduction d'espaces de noms a considérablement amélioré l'organisation du code et les capacités modulaires. Mais un problème pratique suit également: lorsque nous voulons obtenir toutes les constantes définies dans un espace de noms spécifique, PHP lui-même ne fournit pas directement des fonctions pour filtrer les constantes pour l'espace de noms. À l'heure actuelle, get_defined_constants () devient un outil digne d'une recherche approfondie.

1. L'utilisation de base de get_defined_constants

La fonction get_defined_constants () renvoie un tableau associatif contenant toutes les constantes définies dans le script actuel. En transmettant le paramètre Boolean True , vous pouvez également vous regrouper par classification (y compris les constantes définies par l'utilisateur):

 $constants = get_defined_constants(true);
print_r($constants['user']); // Obtenez toutes les constantes définies par l'utilisateur

Cela peut nous aider à filtrer initialement les constantes de base PHP, les constantes d'extension et d'autres contenus non pertinents, mais cela ne suffit pas pour être décomposé par l'espace de noms.

2. Caractéristiques de dénomination des constantes d'espace de noms

Les constantes définies dans les espaces de noms existent en fait comme des constantes mondiales au sein de PHP, sauf que leurs préfixes d'espace de noms sont inclus. Par exemple:

 namespace App\Config;
const TIMEOUT = 30;

Le nom de clé de cette constante dans le résultat de retour dans get_defined_constants () sera app \ config \ timeout . Par conséquent, nous pouvons filtrer les constantes que nous intéressons par le résultat de retour par match régulier ou jugement préfixe de chaîne.

3. Filtre Constantes pour des espaces de noms spécifiques

Voici une fonction simple qui filtre les pièces appartenant à un espace de noms spécifique à partir de constantes définies par l'utilisateur:

 function get_namespace_constants(string $namespace): array {
    $allConstants = get_defined_constants(true);
    $userConstants = $allConstants['user'] ?? [];

    $namespacePrefix = trim($namespace, '\\') . '\\';
    $filteredConstants = [];

    foreach ($userConstants as $name => $value) {
        if (strpos($name, $namespacePrefix) === 0) {
            $filteredConstants[$name] = $value;
        }
    }

    return $filteredConstants;
}

Exemple d'appel:

 print_r(get_namespace_constants('App\\Config'));

Cette fonction renvoie un tableau similaire à la structure suivante:

 Array
(
    [App\Config\TIMEOUT] => 30
    [App\Config\RETRIES] => 5
)

4. Choses à noter et de solution de contournement

  1. Les constantes doivent être définies en premier
    get_defined_constants () ne peut obtenir que des constantes qui ont été définies avant l'appel. Cela signifie que vous devez vous assurer que le fichier (ou l'espace de noms) correspondant est chargé.

  2. Nommer les spécifications <br> S'il y a des noms constants en double sous plusieurs espaces de noms, le filtrage dépend du nom complet (y compris l'espace de noms) et il n'y aura pas de conflit.

  3. Peut être encapsulé en fonctions d'outils ou en méthodes de classe <br> Si vous avez souvent besoin d'obtenir des constantes sous un module ou un espace de noms, vous pourriez également encapsuler la logique ci-dessus dans une classe d'outils généraux pour améliorer la réutilisabilité du code.

5. Développez l'application: combinée avec le chargement de configuration

Dans certains cadres ou cadres personnalisés, les constantes peuvent être utilisées comme alternatives ou suppléments aux éléments de configuration. L'enregistrement de configuration automatique peut être implémenté en combinaison avec get_namespace_constants () . Par exemple:

 $config = get_namespace_constants('App\\Config');
file_put_contents('https://m66.net/log/config_snapshot.json', json_encode($config));

De cette façon, les instantanés de configuration peuvent être enregistrés ou envoyés à des systèmes distants pour un fonctionnement et une maintenance faciles ou un dépannage.

Conclusion

Bien que PHP ne fournit pas directement des fonctions natives qui répertorient les constantes par espace de noms, nous pouvons toujours réaliser cette exigence en utilisant get_defined_constants () avec des règles de préfixe d'espace de noms. La maîtrise de ces compétences améliore non seulement les capacités de l'organisation du code, mais donne également un jeu complet à la valeur réelle du développement du cadre ou des grands systèmes.