constant()
Die Funktion constant() in PHP gibt den Wert einer Konstante zurück, deren Name als String übergeben wird.
Was constant() macht
Die Funktion constant() gibt den Wert einer Konstante zurück, deren Name als String übergeben wird. Diese Seite beschreibt die Signatur, wann man sie statt einer direkten Konstantenreferenz verwenden würde, wie sie mit Klassen- und Enum-Konstanten funktioniert und welche Fallstricke es zu beachten gibt.
Wenn der Name einer Konstante erst zur Laufzeit bekannt ist — beispielsweise weil er aus einer anderen Variable zusammengesetzt wurde — ist constant() der richtige Weg, ihn aufzulösen. Wie Konstanten überhaupt erstellt werden, erfahren Sie unter PHP Constants und bei der Funktion define().
Syntax und Rückgabewert
constant(string $name): mixed$name— der Name der Konstante als string. Bei einer Klassenkonstante wird die vollqualifizierte FormClassName::CONSTANTverwendet.- Gibt den Wert der Konstante zurück. Der Rückgabetyp entspricht dem, was die Konstante enthält (
int,string,float,bool,arrayoder ein Enum-Fall).
Ist die Konstante nicht definiert, wirft constant() ab PHP 8 einen Error (eine \Error-Exception). Prüfen Sie vorher mit defined(), wenn Sie nicht sicher sind.
Einfaches Beispiel
Die Konstante PI wird mit dem Wert 3.14159 definiert. constant("PI") ruft diesen Wert ab, der anschließend zur Berechnung der Kreisfläche verwendet wird. Die Ausgabe lautet:
The area of a circle with radius 5 is 78.53975.Wann würde ich es verwenden?
In diesem einfachen Beispiel macht constant("PI") genau dasselbe wie das direkte Schreiben von PI — es gibt also keinen Grund, es hier zu verwenden. Die Funktion kommt erst dann zum Einsatz, wenn der Name der Konstante erst zur Laufzeit bekannt ist. Da man keine Variable an die Stelle eines Konstantennamens schreiben kann, erlaubt constant() die Auflösung eines in einem string gespeicherten Namens:
<?php
const LEVEL_LOW = 1;
const LEVEL_HIGH = 9;
$severity = 'HIGH';
$value = constant("LEVEL_$severity");
echo "Severity level: $value";Dies gibt Severity level: 9 aus. Die gewählte Konstante hängt von $severity ab — etwas, das eine fest codierte Referenz auf LEVEL_HIGH nie leisten könnte.
Klassen- und Enum-Konstanten
constant() löst auch Klassenkonstanten und Enum-Fälle auf, wenn die Form Class::NAME als string übergeben wird:
<?php
class Http
{
const NOT_FOUND = 404;
}
echo constant('Http::NOT_FOUND'); // 404Bei einem Enum gibt constant() das passende Fall-Objekt zurück, sodass man dessen value auslesen kann:
<?php
enum Suit: string
{
case Hearts = 'H';
case Spades = 'S';
}
$case = constant('Suit::Hearts');
echo $case->value; // HSchutz vor undefinierten Konstanten
Wird der Name einer nicht vorhandenen Konstante übergeben, wirft constant() einen Error. Kombinieren Sie constant() mit defined(), um vorher zu prüfen:
<?php
if (defined('TIMEOUT')) {
echo constant('TIMEOUT');
} else {
echo 'not defined';
}Wenn TIMEOUT nicht definiert wurde, gibt dies not defined aus, anstatt abzustürzen.
Fallstricke
- Es erwartet einen string, nicht die Konstante selbst. Das Schreiben von
constant(PI)(ohne Anführungszeichen) versucht, den Wert vonPIals Namen zu verwenden, was fast nie gewünscht ist. - Konstantennamen unterscheiden zwischen Groß- und Kleinschreibung.
constant('pi')findetPInicht. - Undefinierte Namen lösen einen Fehler aus. Schützen Sie sich mit
defined()wie oben gezeigt. - Nur für dynamische Namen verwenden. Wenn der Konstantenname beim Schreiben des Codes bekannt ist, referenzieren Sie ihn direkt — das ist klarer und schneller.