Klassenkonstanten
Es ist möglich, Konstanten für
jede Klasse zu definieren, die gleich und unveränderlich bleiben. Die
standardmäßige Sichtbarkeit einer Klassenkonstante ist
public
.
Hinweis:
Klassenkonstanten können von einer Kindklasse neu definiert werden. Ab PHP 8.1.0 können Klassenkonstanten nicht von einer untergeordneten Klasse neu definiert werden, wenn sie als final definiert ist.
Ein Interface kann ebenfalls Konstanten
enthalten. Die
Interface-Dokumentation
enthält Beispiele dazu.
Es ist möglich, eine Variable als Klassenreferenz zu nutzen. Der
Variablenwert darf 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";
$class = new MyClass();
$class->showConstant();
echo $class::CONSTANT."\n";
?>
Die spezielle Konstante ::class
erlaubt die Auflösung
voll qualifizierter Klassennamen zur Kompilierzeit, was nützlich für Klassen
in Namensräumen ist:
Beispiel #2 Beispiel für ::class in einem Namensraum
<?php
namespace foo {
class bar {
}
echo bar::class; // foo\bar
}
?>
Beispiel #3 Beispiel für Ausdrücke mit Klassenkonstanten
<?php
const ONE = 1;
class foo {
const TWO = ONE * 2;
const THREE = ONE + self::TWO;
const SENTENCE = 'Der Wert von THREE ist '.self::THREE;
}
?>
Beispiel #4 Sichtbarkeitsmodifizierer von Klassenkonstanten seit PHP 7.1.0
<?php
class Foo {
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.