Start · Sprachen · PHP · Referenz · ReflectionClassConstant

ReflectionClassConstant

Klasse

Liefert detaillierte Informationen über eine einzelne Klassenkonstante per Reflection-API.

seit PHP 7.1.0 Kategorie: oop

Signatur

class ReflectionClassConstant implements Reflector

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 */
PENDING pending public /** 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()
    );
}
public OK = 200 public NOT_FOUND = 404 protected SERVER_ERROR = 500

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
}
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.