Signatur
Beschreibung
ReflectionClassConstant ermöglicht die programmatische Inspektion von Konstanten, die in einer Klasse, einem Interface oder einem Trait definiert sind. Damit lassen sich zur Laufzeit Metadaten wie Name, Wert, Sichtbarkeit (public/protected/private), Docblock-Kommentare und die deklarierende Klasse auslesen – ohne die Konstante direkt referenzieren zu müssen.
Typische Anwendungsfälle sind Frameworks und Tools, die auf Basis von Annotationen oder Docblocks in Klassenkonstanten arbeiten, Dokumentations-Generatoren oder Serialisierer, die Konstantenwerte automatisch auswerten. Auch Validierungslogik, die alle Werte einer Klasse (z. B. Status-Codes oder Enum-Ersatz-Konstanten) auflistet, profitiert von dieser Klasse.
Instanzen werden üblicherweise nicht direkt erzeugt, sondern über ReflectionClass::getReflectionConstant() bzw. ReflectionClass::getReflectionConstants() abgerufen. Der direkte Konstruktor ist jedoch ebenfalls nutzbar.
Ab PHP 8.1 unterstützt die Klasse zusätzlich native Enums und deren Enum-Cases sowie das Auslesen von Attributen (#[Attribute]) über getAttributes().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $class Pflicht | object|string | Der Klassenname als String oder eine bestehende Objekt-Instanz, deren Konstante inspiziert werden soll. | |
| $constant Pflicht | string | Der Name der zu untersuchenden Klassenkonstante. |
Beispiele
Grundlegende Verwendung: Konstanten-Metadaten auslesen
<?php
class Status
{
/** Auftrag noch nicht begonnen */
public const PENDING = 'pending';
protected const PROCESSING = 'processing';
private const DONE = 'done';
}
$ref = new ReflectionClassConstant(Status::class, 'PENDING');
echo $ref->getName() . PHP_EOL; // PENDING
echo $ref->getValue() . PHP_EOL; // pending
echo ($ref->isPublic() ? 'public' : 'nicht public') . PHP_EOL; // public
echo $ref->getDocComment() . PHP_EOL; // /** Auftrag noch nicht begonnen */
Alle Konstanten einer Klasse auflisten (via ReflectionClass)
<?php
class HttpStatus
{
public const OK = 200;
public const NOT_FOUND = 404;
protected const SERVER_ERROR = 500;
}
$classRef = new ReflectionClass(HttpStatus::class);
foreach ($classRef->getReflectionConstants() as $constRef) {
$visibility = match (true) {
$constRef->isPublic() => 'public',
$constRef->isProtected() => 'protected',
$constRef->isPrivate() => 'private',
};
printf(
"%s %s = %s\n",
$visibility,
$constRef->getName(),
$constRef->getValue()
);
}
Attribute an Klassenkonstanten auslesen (PHP 8.1+)
<?php
#[Attribute(Attribute::TARGET_CLASS_CONSTANT)]
class Label
{
public function __construct(public string $text) {}
}
class Priority
{
#[Label('Niedrig')]
public const LOW = 1;
#[Label('Hoch')]
public const HIGH = 3;
}
$ref = new ReflectionClassConstant(Priority::class, 'HIGH');
$attrs = $ref->getAttributes(Label::class);
foreach ($attrs as $attr) {
$label = $attr->newInstance();
echo $label->text . PHP_EOL; // Hoch
}
// Wichtig · Fallstricke
Sichtbarkeitsfilter: ReflectionClass::getReflectionConstants() akzeptiert ab PHP 8.0 einen optionalen Filter-Parameter (ReflectionClassConstant::IS_PUBLIC, IS_PROTECTED, IS_PRIVATE), um nur Konstanten einer bestimmten Sichtbarkeit zurückzugeben.
PHP 8.1 – Enums: Bei nativen Enums liefert getReflectionConstants() auch die Enum-Cases zurück. Um diese von regulären Konstanten zu unterscheiden, kann $constRef instanceof ReflectionEnumUnitCase geprüft werden.
Readonly-Konstanten: Ab PHP 8.3 können Klassenkonstanten mit final deklariert werden; isFinal() gibt darüber Auskunft.
Performance: Reflection-Aufrufe sind laufzeitintensiver als direkter Konstantenzugriff. In produktionskritischen Pfaden sollten die Ergebnisse gecacht werden.