PHP: Wie kann eine Klasse auf ihren eigenen Namen verweisen?

8

Wie kann eine Klasse in PHP ihren eigenen Namen referenzieren?

Wie würde zum Beispiel die Methode aussehen?

%Vor%

Aktualisieren

Ich sehe, dass jeder get_class($this) sagt. Aber das ist nicht richtig. Das würde funktionieren, wenn ich eine Instanz von Dog erstellen würde. Ich frage nach einer Methode der Hundeklasse selbst aufzurufen. Wenn Dog % Mammal erweitert, gibt ein Aufruf von get_class($this) innerhalb der Klasse Dog 'Mammal.' Zurück.

Mit anderen Worten:

  • Ich frage nicht "was ist die Klasse der Hundeklasse", auf die die Antwort lautet, "die Hundeklasse ist ein Mitglied der Säugetierklasse."
  • Ich frage auch nicht "gegeben eine Instanz von Hund der Hund Klasse (genannt Rover), was ist seine Klasse?", auf die die Antwort ist "Hund."
  • Was ich frage ist, "kann der Hund selbst mir sagen, mein Name ist Hund?" "

Zum Beispiel:

%Vor%

Update 2

Yacobys Vorschlag von get_called_class() war korrekt. So funktioniert es in dem Beispiel, das ich gab.

%Vor%     
Nathan Long 07.04.2010, 16:21
quelle

5 Antworten

21

Drei Optionen, get_called_class() , get_class() oder die magische Konstante __CLASS__

Von diesen drei get_called_class() ist diejenige, die Sie verwenden möchten, wenn Sie mit einem statische Funktion, obwohl es leider eine PHP-Version von mindestens 5.3.0 erfordert.

get_called_class ()

Wenn Sie die Klasse in eine statische Funktion bringen müssen, wenn die Klasse abgeleitet werden kann, ist sie etwas anders, da self in den Klassennamen aufgelöst wird, in dem sie platziert wurde (siehe Selbstbeschränkungen :: ). Um dieses Problem zu umgehen, müssen Sie die Funktion aus PHP 5.3.0 get_called_class() .

Wenn Sie PHP 5.3.0 oder höher nicht verwenden können, stellen Sie möglicherweise fest, dass Sie die Funktion nicht statisch machen können und dennoch die gewünschten Ergebnisse erzielen.

get_class ()

get_class() liefert den Namen der tatsächlichen Klasse, die das Objekt ist, unabhängig davon, wo der Funktionsaufruf ist.

%Vor%

get_class kann auch ohne Parameter verwendet werden, was auf den ersten Blick darauf hindeutet, dass es mit statischen Funktionen funktionieren würde (da $this nicht übergeben werden muss), aber wenn es ohne Parameter verwendet wird, funktioniert es in genauso wie __CLASS__

%Vor%

__ KLASSE __

__CLASS__ wird immer auf den Namen der Klasse erweitert, in der __CLASS__ aufgelöst wurde, auch wenn die Vererbung berücksichtigt wird.

%Vor%
Yacoby 07.04.2010, 16:23
quelle
2
%Vor%     
Amy B 07.04.2010 16:23
quelle
1

Nun, da ist get_class ($ Object)

Dann gibt es __CLASS__, wenn es in einer Klasse verwendet wird

Oder Sie könnten eine Methode erstellen, die __CLASS __

zurückgibt     
Syntax Error 07.04.2010 16:24
quelle
1

verwende die magische Konstante __CLASS__

    
knittl 07.04.2010 16:44
quelle
0
Benedict Cohen 07.04.2010 16:24
quelle

Tags und Links