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>
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>
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!