2013-05-13 8 views
16

In PHP, was ist der Unterschied zwischen get_called_class() und get_class($this) wenn innerhalb einer Instanz verwendet?

Beispiel:

class A { 
    function dump() { 
     echo get_called_class(); 
     echo get_class($this); 
    } 
} 

class B extends A {} 

$A = new A(); 
$B = new B(); 

$A->dump(); // output is 'AA' 
$B->dump(); // output is 'BB' 

Gibt es einen Unterschied in diesem Fall?

Wann sollte ich das eine oder das andere get_called_class() oder get_class($this) verwenden?

Antwort

18

In diesem Fall gibt es keinen Unterschied, weil $this immer auf die richtige Instanz Punkte, von denen der Klassenname get_class() gelöst verwendet. Die Funktion get_called_class() ist für statische Methoden vorgesehen. Wenn statische Methoden überschrieben werden, gibt diese Funktion den Klassennamen zurück, der den Kontext für die aktuelle Methode bereitstellt, die aufgerufen wird.

0

In diesem Fall gibt es keinen Unterschied, sowohl den Namen der Klasse zurück, aber der get_called _class hat Späte statische Bindung

1

Nicht in diesem Fall ... wenn Dump eine statische Methode und die Beseitigung die $this Parameter ist dann würde get_class in beiden Fällen "A" zurückkehren und get_called_class zurückkehren würde "B", wenn Sie B::dump(); tun

0

Die Antwort, in diesem speziellen Fall ist: NO.

Es gibt keinen Unterschied.


Referenz: (http://php.net/manual/en/function.get-class.php)

String get_class ([object $ object = NULL])

...

Wenn Objekt weggelassen, wenn im Inneren Eine Klasse, der Name dieser Klasse wird zurückgegeben.

11

Für viel schnellere Alternative von get_called_class() in PHP> = 5.5, verwenden Sie static::class. Es funktioniert, um die oberste Klasse für statische Methodenaufrufe sowie für geerbte Methoden abzurufen.