In der PHP -Programmierung sind Konstanten Identifikatoren, die während der Ausführung nicht geändert werden können und häufig für Konfigurationsparameter oder feste Werte verwendet werden. Wenn wir große Anwendungen entwickeln oder Bibliotheken von Drittanbietern debuggen, müssen wir manchmal feststellen, welche Konstanten in einem bestimmten Code definiert oder modifiziert werden. Zu diesem Zeitpunkt ist die Funktion get_defined_constants () nützlich.
get_defined_constants () ist eine PHP-integrierte Funktion, die alle aktuell definierten Konstanten und deren entsprechende Werte zurückgibt. Durch Aufrufen der Funktion vor und nach dem Ausführen des Codes und dem Vergleich können wir die neu hinzugefügten Konstanten genau erfassen und die Werte dieser Konstanten noch weiter überprüfen.
array get_defined_constants ([ bool $categorize = false ] )
Wenn der Parameter $ categorize auf true eingestellt ist, wird das zurückgegebene Array gemäß der Klassifizierung von Konstanten (wie Kern, benutzerdefiniert usw.) gruppiert.
Andernfalls geben Sie ein flaches eindimensionales assoziatives Array zurück, der Schlüssel ist der Name der Konstante und der Wert ist der Wert der Konstante.
Wir können die neuen Konstanten in den Zwischencode hinzufügen, indem wir Get_Defined_Constants () einmal vor und nach einem bestimmten Code -Stück aufrufen und dann die Unterschiede zwischen den beiden Arrays vergleichen.
Hier ist ein vollständiges Beispiel:
<?php
// Zeichnen Sie den anfänglichen konstanten Zustand auf
$before = get_defined_constants();
// Simulieren Sie Konfigurationsdateien oder Bibliotheken von Drittanbietern
include 'http://m66.net/sample-config.php'; // Beispiel URL
// Notieren Sie den Zustand der Konstanten nach dem Laden
$after = get_defined_constants();
// Berechnen Sie neue Konstanten
$new_constants = array_diff_assoc($after, $before);
// Der Ausgabe werden neue Konstanten hinzugefügt
echo "Die neuen Konstanten sind wie folgt:\n";
foreach ($new_constants as $name => $value) {
echo "$name => " . var_export($value, true) . "\n";
}
In diesem Beispiel verwenden wir array_diff_assoc () , um die Unterschiede zwischen zwei Arrays zu vergleichen, die nicht nur die Schlüsselnamen, sondern auch die Schlüsselwerte vergleicht. Auf diese Weise können Sie genau diese neu definierten Konstanten erhalten, anstatt vorhandene Konstanten, deren Werte geändert werden.
Wenn Sie nur benutzerdefinierte Konstanten erhalten möchten, können Sie Klassifizierungsparameter hinzufügen, wenn Sie Get_Defined_Constants (TRUE) aufrufen und die Konstanten unter der Kategorie "Benutzer" aus der Kategorie extrahieren. Zum Beispiel:
$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";
}
Diese Methode eignet sich besonders für Szenarien, in denen die Standardkonstanten ausgeschlossen werden müssen, und können sich darauf konzentrieren, neue Definitionen in der Benutzer- oder Geschäftslogik zu erfassen.
Debugging von Drittbibliotheken : Analysieren Sie, welche Konstanten durch eine Bibliothek oder einen Framework eingeführt werden.
Konfigurationsverfolgung : Position doppelte oder widersprüchliche Konstanten in mehreren Konfigurationsdateien;
Sicherheitsaudit : Überwachen Sie, ob abnormale Konstanten böswillig injiziert werden;
Test und Überprüfung : Vergleich der Statusunterschiede vor und nach dem automatischen Testprozess.
Sobald eine konstante Definition nicht geändert werden kann, werden wiederholte Definitionen eine Warnung verursacht.
Es wird empfohlen, das Präfix des Namespace -Präfixes zu verwenden, um Konflikte zu vermeiden.
Vermeiden Sie dynamisch eine große Anzahl von Konstanten in der Kernlogik, andernfalls wirkt sich dies auf die Wartbarkeit des Codes aus.