Start · Sprachen · PHP · Referenz · get_declared_interfaces

get_declared_interfaces

Funktion

Gibt ein Array mit den Namen aller aktuell definierten (und geladenen) Interfaces zurück.

seit PHP 5.0.0 Kategorie: oop

Signatur

get_declared_interfaces(): array

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

Typ
array
Beschreibung
Ein indiziertes Array mit Strings, wobei jeder String der vollständige Name (inklusive Namespace) eines definierten Interfaces ist. Das Array enthält sowohl PHP-interne als auch benutzerdefinierte Interfaces.

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
// ...
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;
}
Interface ist geladen.

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;
}
Loggable Cacheable

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