In der PHP -Entwicklung verwenden wir häufig Konstanten, um einige globale Konfigurationen wie Pfade, Schalter, Service -Schnittstellen usw. zu definieren, aber in moderneren oder modularen Architekturen ersetzen Konfigurationsarrays (z. B. Konfiguration.Php oder .Env -Umgebungsvariablen) allmählich eine große Anzahl globaler Konstantieren. Um die Migration zu reibungsloser oder Kompatibilitätsvergleiche durchzuführen, müssen wir möglicherweise die in der aktuellen Laufumgebung definierten Konstanten vergleichen, um festzustellen, ob sie durch Werte im Konfigurationsarray ersetzt werden können.
Zu diesem Zeitpunkt ist die Funktion get_defined_constants () nützlich. Es kann alle definierten Konstanten (einschließlich system- und benutzerdefinierter Konstanten) zurückgeben und sie in Form eines Arrays präsentieren, was uns erleichtert, logische Verarbeitung durchzuführen.
Hier ist ein praktisches Beispiel, das zeigt, wie Sie mit dem Konfigurationsarray über get_defined_constants () vergleichen und die Teile herausfinden, die möglicherweise Duplikate oder Konflikte haben.
<?php
// Simulieren Sie ein Konfigurationsarray,Es ist normalerweise möglich von config.php oder env Dateiladen
$config = [
'APP_ENV' => 'production',
'API_URL' => 'https://api.m66.net',
'DEBUG' => false,
];
// Angenommen, einige Konfigurationen sind ursprünglich konstant
define('APP_ENV', 'production');
define('API_URL', 'https://api.m66.net');
define('SITE_NAME', 'MySite');
// Holen Sie sich alle benutzerdefinierten Konstanten
$userConstants = get_defined_constants(true)['user'];
// Wird verwendet, um die passenden Ergebnisse zu speichern
$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;
}
}
// Ausgangsvergleichsergebnisse
echo "=== Übereinstimmende Konfigurationselemente(Konstante und Wert sind konsistent) ===\n";
print_r($matched);
echo "\n=== 不Übereinstimmende Konfigurationselemente(Der gleiche Name, aber unterschiedliche Werte) ===\n";
print_r($unmatched);
echo "\n=== Elemente, die in der Konfiguration vorhanden sind, aber nicht als Konstanten definiert sind ===\n";
print_r($missingInConstants);
Nutzungskonstanten erhalten:
get_defined_constants (true) ['Benutzer'] kann alle benutzerdefinierten Konstanten erhalten, dieser Schritt ist der Schlüssel.
Vergleichslogik:
Über das Konfigurationsarray durchlaufen, prüfen Sie, ob jedes Konfigurationselement in einer Konstante existiert, und wenn es vorhanden ist, sind die Vergleichswerte konsistent.
Klassifizierungsausgabe:
Genau übereinstimmende Begriffe zeigen, dass sie mit dem Konfigurationswert durch Konstanten übereinstimmten.
Ein nicht übereinstimmender Begriff bedeutet, dass es potenzielle Konflikte gibt.
Fehlende Einträge zeigen, dass diese Konfigurationen nicht in Konstanten verschoben wurden oder absichtlich nicht als Konstanten definiert sind.
Migrationsunterstützung: Wenn Sie sich darauf vorbereiten, von alten konstanten Definitionen zu einer einheitlichen Konfigurationsdateistruktur zu migrieren, können Sie diese Methode verwenden, um zu bestätigen, welche Konstanten vom Konfigurationsarray überschrieben wurden.
Debugging -Zweck: Verfolgen Sie die wiederholte Definition von Konstanten und Konfigurationen in großen Projekten, um logische Überschreibungen und Verwirrung zu verhindern.
Umgebungsüberprüfung: Diese Art von Vergleichsmechanismus kann in automatisierte Bereitstellungsskripte eingebettet werden, um sicherzustellen, dass vordefinierte Konstanten und Konfigurationsdateien konsistent sind.
Im Allgemeinen ist der Vergleich von GET_DEFINED_CONSTANTS () mit Konfigurationsarrays eine sehr praktische Codeprüfungstechnik, insbesondere für die Verwendung bei der Refactoring alter Projekte. Wenn Sie ein PHP -Projekt beibehalten, das allmählich von konstanter Konfiguration zu zentraler Konfiguration migriert, sparen Sie diese Methode viel Fehlerbehebung und Wartungszeit.