Start · Sprachen · PHP · Referenz · class_alias

class_alias

Funktion

Erstellt einen Alias-Namen für eine bestehende Klasse, sodass die Klasse unter einem zweiten Namen genutzt werden kann.

seit PHP 5.3.0 Kategorie: oop

Signatur

class_alias(string $original_name, string $alias, bool $autoload = true): bool

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

Typ
bool
Beschreibung
Gibt 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)
Hallo aus NeuKlasse! bool(true) 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();
}
MeinService

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