Aktueller Standort: Startseite> Neueste Artikel> Wie bekomme ich Konstanten unter einen Namespace über die Funktion get_defined_constants? Praktische Techniken und Problemumgehungen

Wie bekomme ich Konstanten unter einen Namespace über die Funktion get_defined_constants? Praktische Techniken und Problemumgehungen

M66 2025-06-27

In der PHP -Entwicklung werden Konstanten häufig verwendet, um Parameter, Statuswerte und andere Daten zu konfigurieren, die während der Programmausführung nicht geändert werden sollen. Seit PHP 5.3 hat die Einführung von Namespaces die Codeorganisation und die modularen Funktionen erheblich verbessert. Es folgt jedoch auch ein praktisches Problem: Wenn wir alle in einem bestimmten Namespace definierten Konstanten erhalten möchten, bietet PHP selbst keine Funktionen für die Filterkonstanten für den Namespace. Zu diesem Zeitpunkt wird Get_DEFINED_CONSTANTS () zu einem Werkzeug, das eine eingehende Forschung verdient.

1. Die grundlegende Verwendung von get_defined_constants

Die Funktion get_defined_constants () gibt ein assoziatives Array zurück, das alle definierten Konstanten im aktuellen Skript enthält. Durch die Übergabe des booleschen wahren Parameters können Sie auch nach Klassifizierung (einschließlich benutzerdefinierter Konstanten) gruppieren:

 $constants = get_defined_constants(true);
print_r($constants['user']); // Holen Sie sich alle benutzerdefinierten Konstanten

Dies kann uns dabei helfen, PHP -Kernkonstanten, Erweiterungskonstanten und andere irrelevante Inhalte zunächst herauszufiltern, aber dies reicht nicht aus, um durch den Namespace unterteilt zu werden.

2. Namensmerkmale von Namespace -Konstanten nennen

In Namespaces definierte Konstanten existieren tatsächlich als globale Konstanten innerhalb von PHP, außer dass ihre Namespace -Präfixe enthalten sind. Zum Beispiel:

 namespace App\Config;
const TIMEOUT = 30;

Der Schlüsselname dieser Konstante in der Rückgabeergebnis in get_defined_constants () ist App \ config \ timeout . Daher können wir die Konstanten herausfiltern, an denen wir aus dem Rückgabeergebnis durch reguläre Übereinstimmungs- oder String -Präfix -Urteilsvermögen interessiert sind.

3. Filterkonstanten für bestimmte Namensbereiche

Hier finden Sie eine einfache Funktion, die Teile, die zu einem bestimmten Namespace von benutzerdefinierten Konstanten gehören, Teile herausfiltern:

 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;
}

Aufrufen Beispiel:

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

Diese Funktion gibt ein Array zurück, das der folgenden Struktur ähnelt:

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

V.

  1. Konstanten müssen zuerst definiert werden
    get_defined_constants () kann nur Konstanten erhalten, die vor dem Anruf definiert wurden. Dies bedeutet, dass Sie sicherstellen müssen, dass die entsprechende Datei (oder der Namespace) geladen wird.

  2. Benennungsspezifikationen <br> Wenn unter mehreren Namensspaces doppelte konstante Namen vorhanden sind, hängt die Filterung vom vollständigen Namen (einschließlich Namespace) ab und es gibt keinen Konflikt.

  3. Kann als Werkzeugfunktionen oder Klassenmethoden <br> eingekapselt werden Wenn Sie häufig Konstanten unter einem Modul oder Namespace erhalten müssen, können Sie die obige Logik genauso gut in eine allgemeine Werkzeugklasse einschränken, um die Wiederverwendbarkeit der Code zu verbessern.

5. Anwendung erweitern: Kombiniert mit dem Laden der Konfiguration

In einigen Frameworks oder benutzerdefinierten Frameworks können Konstanten als Alternativen oder Ergänzungsmittel zu Konfigurationselemente verwendet werden. Die automatische Konfigurationsregistrierung kann in Kombination mit Get_NameSpace_Constants () implementiert werden. Zum Beispiel:

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

Auf diese Weise können Konfigurationsschnappschüsse gespeichert oder an Remote -Systeme gesendet werden, um einen einfachen Betrieb und Wartung oder Fehlerbehebung zu erhalten.

Abschluss

Obwohl PHP nicht direkt native Funktionen bereitstellt, die Konstanten per Namespace auflisten, können wir diese Anforderung immer noch mit Get_Defined_Constants () mit den Vorfixregeln von Namespace -Regeln erfüllen. Das Beherrschen solcher Fähigkeiten verbessert nicht nur die Funktionen der Codeorganisation, sondern verleiht dem tatsächlichen Wert in der Rahmenentwicklung oder großen Systemen auch den tatsächlichen Wert.