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 in übergeordneten statischen Methoden nicht zugegriffen werden kann, was zu 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:
class Action {
public static function n() {
return get_called_class();
}
}
class MyAction extends Action {
}
echo MyAction::n(); // Outputs "MyAction"
2 aus. Verwenden 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.
Zum Beispiel:
class Action {
public function n() {
echo get_class($this);
}
}
class MyAction extends Action {
}
$foo = new MyAction;
$foo->n(); // Outputs "MyAction"
Fazit:
Sowohl späte statische Bindungen als auch get_class($this) bieten Lösungen zum Abrufen des Klassennamens aus einem statischen Methodenaufruf in einem erweiterte Klasse. Späte statische Bindungen sind für statische Methoden vorzuziehen, während get_class($this) für nicht statische Methoden nützlich ist.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3