Start · Sprachen · PHP · Referenz · get_declared_traits

get_declared_traits

Funktion

Gibt ein Array mit den Namen aller aktuell deklarierten Traits zurück.

seit PHP 5.4.0 Kategorie: oop

Signatur

get_declared_traits(): array

Beschreibung

get_declared_traits() liefert ein indiziertes Array, das die Namen aller Traits enthält, die zum Zeitpunkt des Aufrufs im aktuellen PHP-Prozess bekannt sind – sowohl intern definierte als auch per require/include geladene und in der aktuellen Datei selbst definierte Traits.

Die Funktion ist nützlich für Debugging-, Logging- und Introspektions-Aufgaben, z. B. um zur Laufzeit festzustellen, welche Traits geladen wurden, oder um automatisierte Tests und Frameworks zu implementieren, die dynamisch auf verfügbare Traits reagieren müssen.

Die Reihenfolge der zurückgegebenen Trait-Namen ist nicht garantiert und kann je nach Ladereihenfolge und PHP-Version variieren. Traits, die in Namespaces definiert sind, erscheinen mit ihrem vollqualifizierten Namen (z. B. MyNamespace\MyTrait).

Im Gegensatz zu get_declared_classes() und get_declared_interfaces() listet diese Funktion ausschließlich Traits auf; abstrakte Klassen oder Interfaces werden nicht einbezogen.

Rückgabewert

Typ
array
Beschreibung
Ein indiziertes Array mit den Namen aller aktuell deklarierten Traits als Strings. Das Array enthält sowohl PHP-interne als auch benutzerdefinierte Traits. Sind keine Traits deklariert, wird ein leeres Array zurückgegeben.

Beispiele

Alle deklarierten Traits auflisten

<?php
trait Greetable {
    public function greet(): string {
        return 'Hallo!';
    }
}

trait Loggable {
    public function log(string $message): void {
        echo '[LOG] ' . $message . PHP_EOL;
    }
}

$traits = get_declared_traits();

// Nur benutzerdefinierte Traits ausgeben (ohne PHP-interne)
foreach ($traits as $trait) {
    if (in_array($trait, ['Greetable', 'Loggable'])) {
        echo $trait . PHP_EOL;
    }
}
Greetable Loggable

Traits aus einem Namespace erkennen

<?php
namespace App\Concerns;

trait HasTimestamps {
    public function createdAt(): string {
        return date('Y-m-d H:i:s');
    }
}

$traits = get_declared_traits();

if (in_array('App\\Concerns\\HasTimestamps', $traits)) {
    echo 'Trait App\\Concerns\\HasTimestamps ist deklariert.' . PHP_EOL;
}
Trait App\Concerns\HasTimestamps ist deklariert.

Prüfen, ob ein bestimmter Trait existiert (Alternative zu trait_exists)

<?php
trait Serializable {
    public function serialize(): string {
        return json_encode(get_object_vars($this));
    }
}

$traitName = 'Serializable';

if (in_array($traitName, get_declared_traits())) {
    echo "Trait '{$traitName}' ist verfügbar." . PHP_EOL;
} else {
    echo "Trait '{$traitName}' wurde nicht gefunden." . PHP_EOL;
}
Trait 'Serializable' ist verfügbar.

// Wichtig · Fallstricke

Reihenfolge nicht verlassen: Die Reihenfolge der Einträge im zurückgegebenen Array ist implementierungsabhängig und kann sich zwischen PHP-Versionen oder Ausführungen unterscheiden.

Autoloading: Traits, die zwar definiert, aber noch nicht per Autoloader geladen wurden, erscheinen nicht im Ergebnis. get_declared_traits() gibt nur Traits zurück, die zum Zeitpunkt des Aufrufs bereits in den PHP-Prozess geladen wurden.

Alternative: Für die einfache Existenzprüfung eines einzelnen Traits ist trait_exists() vorzuziehen, da es auch den Autoloader auslöst.