Signatur
Beschreibung
get_declared_interfaces() liefert ein indiziertes Array mit den Namen aller Interfaces, die zum Zeitpunkt des Aufrufs in der laufenden PHP-Umgebung bekannt sind – sowohl PHP-interne Interfaces (z. B. Traversable, Iterator, Countable) als auch eigene, selbst definierte oder per Autoloader geladene Interfaces.
Die Funktion ist besonders nützlich beim Debuggen, beim dynamischen Überprüfen der verfügbaren Typen oder beim Erstellen von Frameworks und Dependency-Injection-Containern, die Interfaces auflisten oder prüfen müssen. Sie kann außerdem für Tests eingesetzt werden, um sicherzustellen, dass ein bestimmtes Interface korrekt geladen wurde.
Zu beachten ist, dass nur Interfaces zurückgegeben werden, die zum Zeitpunkt des Aufrufs bereits geladen sind. Interfaces, die via Autoloader noch nicht angefordert wurden, erscheinen nicht in der Liste. Die Reihenfolge der Einträge ist nicht garantiert und kann sich je nach PHP-Version und geladenen Erweiterungen unterscheiden.
Rückgabewert
Beispiele
Alle geladenen Interfaces ausgeben
<?php
$interfaces = get_declared_interfaces();
foreach ($interfaces as $interface) {
echo $interface . PHP_EOL;
}
// Ausgabe (Auszug, je nach PHP-Version):
// Traversable
// IteratorAggregate
// Iterator
// ArrayAccess
// Serializable
// Countable
// Stringable
// ...
Prüfen ob ein eigenes Interface geladen ist
<?php
namespace App\Contracts;
interface PaymentGatewayInterface
{
public function charge(float $amount): bool;
}
// Prüfen, ob das Interface bekannt ist
$interfaces = get_declared_interfaces();
if (in_array('App\\Contracts\\PaymentGatewayInterface', $interfaces)) {
echo 'Interface ist geladen.' . PHP_EOL;
} else {
echo 'Interface ist NICHT geladen.' . PHP_EOL;
}
Alle benutzerdefinierten Interfaces filtern
<?php
interface Loggable {}
interface Cacheable {}
interface Serializable {} // PHP-intern, wird hier als Duplikat ignoriert
$allInterfaces = get_declared_interfaces();
// Nur nicht-interne Interfaces anzeigen (vereinfachte Heuristik über Reflection)
$userDefined = array_filter($allInterfaces, function (string $name): bool {
$ref = new ReflectionClass($name);
return !$ref->isInternal();
});
foreach ($userDefined as $iface) {
echo $iface . PHP_EOL;
}
// Wichtig · Fallstricke
Die Funktion gibt keine Traits oder abstrakten Klassen zurück – dafür existieren get_declared_traits() und get_declared_classes(). PHP-interne Interfaces wie Traversable oder Countable sind stets in der Liste enthalten, da sie mit dem PHP-Core geladen werden.
In großen Projekten mit vielen Namespaces sollte man get_declared_interfaces() nicht in Performance-kritischen Pfaden einsetzen, da die Iteration über alle bekannten Interfaces bei umfangreichen Codebases langsam sein kann.