Es ist möglich für jede Klasse konstante Werte zu definieren, die gleich
und unabänderlich bleiben. Konstanten weichen darin von normalen Variablen
ab, dass man nicht das $ Symbol benutzt, um sie zu
deklarieren oder zu benutzen.
Die standardmäßige Sichtbarkeit einer Klassenkonstante ist public
.
Der Wert kann nur ein konstanter Ausdruck sein, keine (zum Beispiel) Variablen, Klassenattribute oder Funktionsaufrufe.
Ein Interface kann ebenfalls constants
enthalten.
Die Interface-Dokumentation
enthält Beispiele dazu.
Beginnend mit PHP 5.3.0 ist es möglich eine Variable als Klassenreferenz
zu nutzen. Der Variablenwert kann kein Schlüsselwort (wie self
,
parent
oder static
) sein.
Es ist zu beachten, dass Klassenkonstanten nur einmal pro Klasse angelegt werden, und nicht für jedes Klassenexemplar.
Beispiel #1 Eine Konstante definieren und benutzen
<?php
class MyClass
{
const CONSTANT = 'Konstanter Wert';
function showConstant() {
echo self::CONSTANT . "\n";
}
}
echo MyClass::CONSTANT . "\n";
$classname = "MyClass";
echo $classname::CONSTANT . "\n"; // Ab PHP 5.3.0
$class = new MyClass();
$class->showConstant();
echo $class::CONSTANT; // Ab PHP 5.3.0
?>
Beispiel #2 Beispiel für statische Daten
<?php
class foo {
// Ab PHP 5.3.0
const BAR = <<<'EOT'
bar
EOT;
// Ab PHP 5.3.0
const BAZ = <<<EOT
baz
EOT;
}
?>
Hinweis:
Die Unterstützung der Initialisierung von Konstanten mit Heredoc und Nowdoc Syntax wurde in PHP 5.3.0 eingeführt.
Die spezielle ::class
Konstante ist von PHP 5.5.0 an verfügbar,
und erlaubt vollständig qualifizierte Klassennamensauflösung zur Kompilationszeit,
was nützlich für Klassen in Namensräumen ist:
Beispiel #3 Beispiel für ::class in einem Namensraum
<?php
namespace foo {
class bar {
}
echo bar::class; // foo\bar
}
?>
Beispiel #4 Beispiel mit konstanten Ausdrücken
<?php
const ONE = 1;
class foo {
// Ab PHP 5.6.0
const TWO = ONE * 2;
const THREE = ONE + self::TWO;
const SENTENCE = 'Der Wert von THREE ist '.self::THREE;
}
?>
Es ist möglich einen skalaren Ausdruck, der numerische und Zeichenketten-Literale und/oder Konstanten enthält, im Kontext einer Klassenkonstante zu verwenden.
Hinweis:
Die Unterstützung von konstanten Ausdrücken wurde in PHP 5.6.0 hinzugefügt.
Beispiel #5 Sichtbarkeitsmodifizierer von Klassenkonstanten
<?php
class Foo {
// Von PHP 7.1.0 an
public const BAR = 'bar';
private const BAZ = 'baz';
}
echo Foo::BAR, PHP_EOL;
echo Foo::BAZ, PHP_EOL;
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe mit PHP 7.1:
bar Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …
Hinweis:
Von PHP 7.1.0 an sind Sichtbarkeitsmodifizierer für Klassenkonstanten erlaubt.