W3docs

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 Form ClassName::CONSTANT verwendet.
  • Gibt den Wert der Konstante zurück. Der Rückgabetyp entspricht dem, was die Konstante enthält (int, string, float, bool, array oder 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

php— editable, runs on the server

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'); // 404

Bei 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; // H

Schutz 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 von PI als Namen zu verwenden, was fast nie gewünscht ist.
  • Konstantennamen unterscheiden zwischen Groß- und Kleinschreibung. constant('pi') findet PI nicht.
  • 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.

Übung

Übung
Was sind die Eigenschaften von PHP-Konstanten?
Was sind die Eigenschaften von PHP-Konstanten?
Was this page helpful?