Ich habe zwei Klassen: Action
und MyAction
. Letzteres wird erklärt als:
class MyAction extends Action {/* some methods here */}
Alles, was ich brauche, ist eine Methode in der Action
Klasse (nur darin, da es viele geerbte Klassen gibt und ich diese Methode nicht in allen implementieren möchte), die den Klassennamen von einem statischen Aufruf zurückgibt. Hier ist, worüber ich spreche:
Class Action {
function n(){/* something */}
}
Und wenn ich es nenne:
MyAction::n(); // it should return "MyAction"
Jede Deklaration in der übergeordneten Klasse hat jedoch nur Zugriff auf die übergeordnete Klassenvariable __CLASS__
, die den Wert "Aktion" hat.
Gibt es eine Möglichkeit, dies zu tun?
quelle
get_called_class()
:)new static();
aus einer privaten statischen Methode ausgeführt wird (unter Verwendung von xampp unter Windows und PHP> 5.5).:s
Seit 5.5 können Sie verwenden
class
Schlüsselwort für den Klassennamen Auflösung , die viel schneller sein würde als Funktion Anrufe. Funktioniert auch mit Schnittstellen.quelle
Es ist nicht die ideale Lösung, aber es funktioniert unter PHP <5.3.0.
Der Code wurde von septuro.com kopiert
quelle
Jetzt (wenn 5.3 angekommen ist) ist es ziemlich einfach:
http://php.net/manual/en/function.get-called-class.php
quelle
quelle
In den verfügbaren PHP-Versionen gibt es keine Möglichkeit, das zu tun, was Sie wollen. Paul Dixons Lösung ist die einzige. Ich meine, das Codebeispiel, da die Funktion für späte statische Bindungen, von der er spricht, ab PHP 5.3 verfügbar ist, das sich in der Beta befindet.
quelle
(PHP 5> = 5.3.0, PHP 7)
get_called_class - Der Klassenname "Late Static Binding"
Dieser Link könnte hilfreich sein
quelle