So rufen Sie Klassennamen aus statischen Aufrufen in erweiterten PHP-Klassen ab
In der Softwareentwicklung können Klassen durch Vererbung Eigenschaften und Funktionen von ihnen erben Elternklassen. Wenn Sie in PHP eine Klasse mit Unterklassen erweitern, können Sie auf Eigenschaften und Methoden zugreifen, die in der übergeordneten Klasse definiert sind. Der Zugriff auf den Namen der Unterklasse innerhalb einer statischen Methode in der übergeordneten Klasse kann jedoch eine Herausforderung sein.
Problem:
Angenommen, Sie haben eine Aktion der übergeordneten Klasse und eine Unterklasse MyAction, die von Action erbt. Sie möchten eine Methode in der Action-Klasse entwickeln, die den Namen der Unterklasse zurückgibt, wenn sie statisch aus der Unterklasse aufgerufen wird. Die Verwendung der Variable __CLASS__ in der übergeordneten Klasse gibt jedoch immer den Namen der übergeordneten Klasse zurück, was nicht das gewünschte Ergebnis ist.
Lösung 1: Späte statische Bindungen (PHP 5.3):
PHP 5.3 führte späte statische Bindungen ein, die die Zielklasse für statische Methodenaufrufe zur Laufzeit und nicht während der Definition auflösen. Diese Funktion ermöglicht die Verwendung der Funktion get_claimed_class(), die den Namen der Klasse abruft, von der eine statische Methode aufgerufen wird.
Zum Beispiel:
<code class="php">class Action { public static function n() { return get_called_class(); } } class MyAction extends Action { } echo MyAction::n(); //displays MyAction</code>
In diesem Beispiel ist die Die Funktion get_claimed_class() gibt den Namen der Unterklasse MyAction zurück, obwohl die Methode in der übergeordneten Klasse Action definiert ist. Dieser Ansatz bietet eine unkomplizierte Lösung für das Problem.
Lösung 2: Dynamischer Klassennamenabruf (PHP 5.2):
Während späte statische Bindungen in PHP-Versionen nicht verfügbar sind Vor 5.3 gibt es eine alternative Methode zum dynamischen Abrufen des Klassennamens:
<code class="php">class Action { public function n() { $object = new ReflectionObject($this); return $object->getName(); } } class MyAction extends Action { } $myAction = new MyAction(); echo $myAction->n(); //displays MyAction</code>
Bei diesem Ansatz erstellen wir eine ReflectionObject-Instanz für das aktuelle Objekt und verwenden die Methode getName(), um den Klassennamen abzurufen . Diese Lösung funktioniert in PHP-Versionen ab 5.2, erfordert jedoch einen zusätzlichen Schritt zum Erstellen eines Reflektionsobjekts.
Das obige ist der detaillierte Inhalt vonWie kann ich den Unterklassennamen aus einem statischen Methodenaufruf in erweiterten PHP-Klassen abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!