Signatur
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
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;
}
}
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;
}
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;
}
// 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.