Signatur
Beschreibung
class_alias() registriert einen alternativen Namen für eine bereits existierende Klasse. Nach dem Aufruf können Objekte sowohl unter dem Original-Klassennamen als auch unter dem Alias instanziiert werden – beide Namen verweisen auf dieselbe Klasse und erzeugen Objekte desselben Typs.
Typische Einsatzgebiete sind Rückwärtskompatibilität (z. B. nach dem Umbenennen einer Klasse), sowie Refactoring-Phasen, in denen alter und neuer Klassenname parallel existieren sollen. Auch Bibliotheken nutzen class_alias(), um kurze Alias-Namen für lange Fully-Qualified-Class-Names bereitzustellen.
Der optionale Parameter $autoload steuert, ob die Originalklasse automatisch über den registrierten Autoloader geladen werden soll, falls sie noch nicht bekannt ist. Der Standard ist true.
Zu beachten ist, dass class_alias() sowohl für Klassen als auch für Interfaces und Traits funktioniert (ab PHP 5.3 für Klassen und Interfaces, Traits ab PHP 5.4).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $original_name Pflicht | string | Der vollqualifizierte Name der Originalklasse (oder des Interfaces/Traits), für die ein Alias erstellt werden soll. | |
| $alias Pflicht | string | Der neue Alias-Name, unter dem die Klasse künftig ebenfalls angesprochen werden kann. Kann ein vollqualifizierter Name mit Namespace sein. | |
| $autoload | bool | true | Gibt an, ob die Originalklasse per Autoloader geladen werden soll, falls sie zum Zeitpunkt des Aufrufs noch nicht definiert ist. Standard: true. |
Rückgabewert
true zurück, wenn der Alias erfolgreich erstellt wurde, andernfalls false (z. B. wenn die Originalklasse nicht existiert und nicht autogeladen werden kann).Beispiele
Einfacher Klassen-Alias für Rückwärtskompatibilität
<?php
class NeuKlasse {
public function hallo(): string {
return 'Hallo aus NeuKlasse!';
}
}
// Alter Name zeigt auf neue Implementierung
class_alias('NeuKlasse', 'AltKlasse');
$obj = new AltKlasse();
echo $obj->hallo(); // Hallo aus NeuKlasse!
var_dump($obj instanceof NeuKlasse); // bool(true)
var_dump($obj instanceof AltKlasse); // bool(true)
Alias für einen langen Namespace-Namen
<?php
namespace Bibliothek\Tief\Verschachtelt {
class MeinService {
public function name(): string {
return 'MeinService';
}
}
}
namespace App {
// Kurzen Alias im globalen Namespace anlegen
class_alias('Bibliothek\\Tief\\Verschachtelt\\MeinService', 'MeinService');
$service = new \MeinService();
echo $service->name();
}
Alias für ein Interface prüfen
<?php
interface LoggerInterface {
public function log(string $message): void;
}
class_alias('LoggerInterface', 'Psr\\Log\\LoggerInterface');
class MyLogger implements LoggerInterface {
public function log(string $message): void {
echo $message . PHP_EOL;
}
}
$logger = new MyLogger();
var_dump($logger instanceof \Psr\Log\LoggerInterface); // bool(true)
// Wichtig · Fallstricke
Reihenfolge: Der Alias wird sofort registriert. Wenn die Originalklasse noch nicht geladen ist und $autoload = false gesetzt wird, schlägt der Aufruf fehl und gibt false zurück.
Traits: class_alias() funktioniert nicht zuverlässig mit Traits – ein Trait-Alias kann nicht direkt als Trait verwendet werden, da PHP intern zwischen Trait- und Klassen-Autoloading unterscheidet.
Namespace-Schreibweise: Vollqualifizierte Namen werden ohne führenden Backslash angegeben, z. B. 'Foo\\Bar\\Baz'.
Keine erneute Definition: Wenn der Alias-Name bereits als Klasse registriert ist, gibt die Funktion false zurück und löst einen Fehler aus.