2013-05-13 11 views
16

W PHP jaka jest różnica między get_called_class() i get_class($this), gdy są używane wewnątrz instancji?

Przykład:

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' 

Czy jest jakaś różnica w tym przypadku?

Kiedy należy używać jednego lub drugiego get_called_class() lub get_class($this)?

Odpowiedz

18

W tym przypadku nie ma żadnej różnicy, bo $this zawsze zwraca się do właściwej instancji, od którego nazwa klasy jest rozwiązane za pomocą get_class().

Funkcja get_called_class() jest przeznaczona do metod statycznych. Gdy metody statyczne zostaną nadpisane, funkcja zwróci nazwę klasy, która zapewnia kontekst dla bieżącej metody, która jest wywoływana.

0

W tym przypadku nie ma żadnej różnicy, zarówno zwróci nazwę klasy, ale get_called _class ma pó Static Oprawa

1

nie w tym przypadku ... jeśli wysypisko była metoda statyczna i wyeliminować parametr $this następnie get_class wróci „a” w obu przypadkach i get_called_class wróci „B”, jeśli nie B::dump();

0

odpowiedź, w tym konkretnym przypadku, to: NO.

Nie ma różnicy.


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

strunowe get_class ([object $ obiekt = NULL])

...

Jeśli obiekt zostanie pominięty, gdy wewnątrz klasa, zwracana jest nazwa tej klasy.

11

Dla znacznie szybszej alternatywy dla get_called_class() w PHP> = 5.5, użyj static::class. Działa w celu uzyskania klasy najwyższego poziomu dla wywołań metod statycznych, a także dla metod dziedziczonych.