Heim > Backend-Entwicklung > PHP-Tutorial > Wie erhalte ich den Klassennamen einer erweiterten PHP-Klasse in einem statischen Methodenaufruf?

Wie erhalte ich den Klassennamen einer erweiterten PHP-Klasse in einem statischen Methodenaufruf?

Susan Sarandon
Freigeben: 2024-11-01 10:10:29
Original
1076 Leute haben es durchsucht

How to Get the Class Name from an Extended PHP Class in a Static Method Call?

Erhalten des Klassennamens aus dem statischen Aufruf einer erweiterten PHP-Klasse

In der objektorientierten Programmierung erweitern Klassen häufig Basisklassen, um deren Funktionalität zu erben und zu erweitern . Ein häufiges Szenario besteht darin, dass der Klassenname aus einem statischen Methodenaufruf in einer erweiterten Klasse abgerufen werden muss, obwohl CLASS immer den Namen der definierenden Klasse zurückgibt.

Problem: Unzugänglichkeit des Klassennamens in übergeordneten statischen Methoden

Stellen Sie sich ein Szenario mit zwei Klassen vor, Action und MyAction, wobei MyAction Action erweitert. Action definiert eine statische Methode, n(), auf die über die Konstante CLASS innerhalb übergeordneter statischer Methoden nicht zugegriffen werden kann, was zur CLASS führt Der Wert wird unabhängig vom Aufruf auf „Aktion“ gesetzt Klasse.

Lösungen:

1. Späte statische Bindungen (PHP 5.3):

Mit späten statischen Bindungen können Sie die Zielklasse eines statischen Methodenaufrufs zur Laufzeit und nicht erst bei der Definition der Methode bestimmen. Dies wird mit der Funktion get_claimed_class() erreicht, die den Namen der Klasse zurückgibt, in der die statische Methode aufgerufen wurde.

Zum Beispiel:

<code class="php">class Action {
    public static function n() {
        return get_called_class();
    }
}

class MyAction extends Action {

}

echo MyAction::n(); // Outputs "MyAction"</code>
Nach dem Login kopieren

2. Verwendung von get_class($this) (nur nicht-statische Methoden):

Wenn die betreffende Methode nicht statisch ist, können Sie get_class($this) verwenden, um die Klasse abzurufen Name, von dem aus die Methode aufgerufen wurde.

Für Beispiel:

<code class="php">class Action {
    public function n() {
        echo get_class($this);
    }
}

class MyAction extends Action {

}

$foo = new MyAction;
$foo->n(); // Outputs "MyAction"</code>
Nach dem Login kopieren

Fazit:

Sowohl späte statische Bindungen als auch get_class($this) bieten Lösungen zum Abrufen des Klassennamens aus einem statischen Methodenaufruf in einer erweiterten Klasse. Späte statische Bindungen sind für statische Methoden vorzuziehen, während get_class($this) für nicht statische Methoden nützlich ist.

Das obige ist der detaillierte Inhalt vonWie erhalte ich den Klassennamen einer erweiterten PHP-Klasse in einem statischen Methodenaufruf?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage