get_defined_constants () ist eine integrierte Funktion in PHP, um alle definierten Konstanten zu erhalten. Es gibt ein assoziatives Array zurück, in dem der Schlüssel der konstante Name ist und der Wert der konstante Wert ist. Dies ist nützlich, wenn Sie die Laufzeitumgebung debugieren, reflektieren oder analysieren. In verschiedenen Versionen von PHP kann das Verhalten dieser Funktion jedoch einige Unterschiede aufweisen, die sich hauptsächlich in den folgenden Aspekten widerspiegeln:
Mit der Entwicklung von PHP werden ständig neue Kernkonstanten eingeführt, insbesondere nachdem neue Erweiterungen hinzugefügt oder vorhandene Module nachgeagnet werden. In PHP 7.x und PHP 8.x führten beispielsweise Änderungen des Fehlerhandhabungsmechanismus zur Einführung einer großen Anzahl neuer E_* -Fehlerebene.
print_r(array_keys(get_defined_constants()));
In PHP 5.6 sehen Sie möglicherweise keine Zusammenführungskonstanten wie E_error | E_Recoverable_error , aber nach Php 7 wird es viele weitere Definitionen solcher kombinierten Werte geben.
Ab PHP 5.3 unterstützt Get_Defined_Constants () einen booleschen Parameter $ kategorisieren , und wenn sie auf TRUE eingestellt sind, werden Konstanten nach Erweiterung klassifiziert.
print_r(get_defined_constants(true));
In verschiedenen PHP -Versionen können sich die Klassifizierungsnamen verschiedener Erweiterungsmodule ändern. Zum Beispiel:
Arrays in PHP 7.2 können Kern , PCre , SPL , Datum , libxMl , OpenSSL , Curl usw. enthalten.
Wie FFI , Natrium und Faser, die nach PHP 8.0 eingeführt wurden, werden ebenfalls zu den Ausgangsergebnissen hinzugefügt.
Ob bestimmte Konstanten in den Ergebnissen von get_defined_constants () erscheinen, kann durch Konfigurationsdateien wie Php.ini oder Kompilieroptionen beeinflusst werden. Zum Beispiel, ob Zend Opcache aktiviert ist, ob bestimmte Erweiterungsmodule geladen sind, usw.
define('MY_APP_VERSION', '1.0.0');
print_r(get_defined_constants());
Diese Ausgabe ist häufig inkonsistent zwischen dem Entwicklungsserver und dem Produktionsserver, da die von ihnen aktivierten Erweiterungs- und Konfigurationsparameter unterschiedlich sein können.
Php 8 führt Syntaxfunktionen wie JIT ein, übereinstimmen Ausdrücke, Attribute usw. und bringt auch neue Konstanten entsprechend mit. Ausführen von get_defined_constants () findet das Auftreten von Konstanten wie PHP_FD_SETSIZE , T_MATCH , T_ATTRIBUTE usw.
Diese neuen Konstanten existieren in der alten Version überhaupt nicht. Wenn Sie sich also auf diese Konstanten verlassen, wenn Sie einen hochkompatiblen Code schreiben, müssen Sie die definierte () -Funktion verwenden, um zu beurteilen.
In seltenen Fällen werden einige definierte Konstanten in einer neuen Version geändert oder verworfen. Während das PHP -Team normalerweise die Rückwärtskompatibilität gewährleistet, wird es nicht ausgeschlossen, Anpassungen vorzunehmen, wenn die Upgrades der großen Versionsanpassungen aktualisiert werden. Beispielsweise können einige Erweiterungen, die mit dem zugrunde liegenden System interagieren, den Standardwert ändern oder bestimmte Konstanten löschen, die nicht mehr unterstützt werden, da sie auf Aktualisierungen der C -Bibliothek beruhen.