„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 10.11.2024
Durchsuche:991

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

Neuestes Tutorial Mehr>

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