In PHP ist Get_Defined_Constants () eine sehr nützliche Funktion, die ein assoziatives Array zurückgibt, das alle definierten Konstanten enthält. Diese Funktion wird normalerweise verwendet, um alle Konstanten während der aktuellen Skriptausführung zu definieren. Sie können auf ein Problem mit solchen Problemen stoßen: Wenn Sie Get_Defined_Constants () verwenden, werden Klassenkonstanten im Rückgabeergebnis nicht angezeigt. Warum passiert das? In diesem Artikel werden wir dieses Problem ausführlich untersuchen.
Zunächst müssen wir das Konzept der Klassenkonstanten verstehen. In PHP sind Klassenkonstanten Konstanten, die mit Klassen verbunden sind, nicht mit Objektinstanzen. Klassenkonstanten werden durch das CONT -Keyword definiert und können innerhalb und außerhalb der Klasse zugegriffen werden. Ihr Umfang ist jedoch auf diese Klasse und ihre erbliche Klasse beschränkt. Ein Beispiel für die Definition einer Klassenkonstante ist wie folgt:
class MyClass {
const MY_CONSTANT = 'This is a class constant';
}
echo MyClass::MY_CONSTANT; // Ausgabe:This is a class constant
Der Unterschied zwischen Klassenkonstanten und allgemeinen Größen besteht darin, dass allgemeine Größen global sind, während Klassenkonstanten auf den Klassenumfang und deren Erbe beschränkt sind.
Die Funktion get_defined_constants () gibt alle definierten Konstanten im aktuellen PHP -Skript zurück, einschließlich vordefinierter Konstanten und der Konstanten, die Sie im Skript definieren. Sie können es so verwenden:
$constants = get_defined_constants();
print_r($constants);
Dies gibt ein assoziatives Array aus, das alle konstanten Namen und Werte enthält.
Obwohl Get_DEFINED_CONSTANTS () die meisten Konstanten auflisten kann, gibt es keine Klassenkonstanten zurück. Dies liegt daran, dass das konstante System von PHP Klassenkonstanten als Teil einer Klasse behandelt, nicht als globale Konstanten. Daher gibt get_defined_constants () standardmäßig nur globale Konstanten zurück und gibt keine Konstanten zurück, die sich auf eine bestimmte Klasse oder eine Objektinstanz beziehen.
Wenn Sie Klassenkonstanten erhalten müssen, müssen Sie auf andere Weise auf sie zugreifen, z. B. durch die Reflection Class -Klasse. Hier ist ein Beispiel für Klassenkonstanten:
$reflectionClass = new ReflectionClass('MyClass');
$classConstants = $reflectionClass->getConstants();
print_r($classConstants);
Diese Methode gibt alle Konstanten der MyClass -Klasse zurück und Sie können auf sie zugreifen, wie Sie normalerweise auf sie zugreifen würden.
Während dies wie eine Einschränkung von PHP erscheinen mag, entspricht dieses Design den Prinzipien der objektorientierten Programmierung (OOP). In OOP gehören Klassenkonstanten zu einer bestimmten Klasse, nicht Teil des globalen Bereichs. Ihr Umfang ist normalerweise begrenzt und gehört zur Definition der Klasse, nicht Teil des globalen Umfelds. Daher besteht die Ausnahme von Klassenkonstanten aus dem Rückgabeergebnis von get_defined_constants (), um die Verschmutzung des globalen Namespace zu vermeiden und den Umfang der Konstanten klar zu halten.
Wenn Sie auf alle Konstanten zugreifen müssen, einschließlich Klassenkonstanten, können Sie dies tun, um:
Verwenden Sie ReflectionClass , um Klassenkonstanten zu erhalten:
$reflectionClass = new ReflectionClass('MyClass');
$classConstants = $reflectionClass->getConstants();
print_r($classConstants);
Sammeln Sie manuell Klassenkonstanten:
Sie können Klassenkonstanten separat von globalen Konstanten sammeln, Klassenkonstanten innerhalb der Klasse speichern oder sie zentral auf andere Weise verwalten.
Erweitern Sie Get_DEFINED_CONSTANTS () :
Sie können eine benutzerdefinierte Funktion erstellen, die get_defined_constants () und ReflectionClass kombiniert, um alle Konstanten, einschließlich Klassenkonstanten, zurückzugeben.
function get_all_constants() {
$constants = get_defined_constants();
$classes = get_declared_classes();
foreach ($classes as $class) {
$reflectionClass = new ReflectionClass($class);
$constants = array_merge($constants, $reflectionClass->getConstants());
}
return $constants;
}
$allConstants = get_all_constants();
print_r($allConstants);
Diese Methode gibt sowohl globale Konstanten als auch Klassenkonstanten zurück.
Die Funktion von Get_Defined_Constants () von PHP gibt keine Klassenkonstanten zurück, da Klassenkonstanten zum Definitionsbereich der Klasse und nicht zum globalen Konstanten gehören. Um auf Klassenkonstanten zuzugreifen, können Sie sie über ReflectionClass erhalten oder Methoden anpassen, um Klassenkonstanten mit globalen Konstanten aufzulisten. Der Zweck davon ist, den Umfang der Konstanten klar zu halten und die Prinzipien der objektorientierten Programmierung zu befolgen.