Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann ich den Unterklassennamen aus einem statischen Methodenaufruf in erweiterten PHP-Klassen abrufen?

Wie kann ich den Unterklassennamen aus einem statischen Methodenaufruf in erweiterten PHP-Klassen abrufen?

DDD
Freigeben: 2024-10-30 05:58:02
Original
278 Leute haben es durchsucht

How Can I Retrieve the Subclass Name from a Static Method Call in Extended PHP Classes?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage