Self vs. To w PHP

Self vs. To w PHP

PHP obsługuje klasy i inne konstrukcje obiektowe. Funkcje statyczne i zmienne w klasach PHP nie są powiązane z żadnym konkretnym instancją klasy (innymi słowy, obiekt). Zobacz różnicę między obiekt I klasa.

Zamiast tego funkcje statyczne i zmienne są powiązane z samą definicją klasy. Innymi słowy, wszystkie przypadki klasy mają tę samą zmienną statyczną. W kontekście metody (funkcji) klasy, zmienne statyczne i funkcje są dostępne samego siebie::. Inne metody i zmienne są stosowane w kontekście obiektu (instancji) klasy, przy użyciu to->.

Wykres porównania

Self kontra ta tabela porównawcza
samego siebieTen
Może być używane w funkcjach statycznych Tak NIE
dostępna zmienna klasowa i metody z samego siebie:: $ this-> (zauważ, że php> 5.3 pozwala na użycie tego $ ze zmiennymi statycznymi Użyj $ this :: $ foo. $ this-> foo będzie nadal niezdefiniowany, jeśli $ foo jest statycznym var.)
Potrzebuje instanowanego obiektu NIE Tak

Self vs to w PHP - przykłady

klasowa egzaminPleclass public static $ foo; Publiczny bar $; Funkcja publiczna regularne funkcja () echo $ this-> bar;  public static funkcja staticFunction () echo self :: $ foo;  public statyczna funkcja anotherstatfn () self :: staticFunction ();  funkcja public regularfnusingStaticvar () echo self :: $ foo;  // Uwaga: od PHP 5.3 Korzystanie z $ this :: $ bar zamiast self :: $ bar jest dozwolony egzaminPleclass :: $ foo = "hello"; $ obj = new ExamPleClass (); $ obj-> bar = "świat!"; ExamPleClass :: staticFunction (); /* drukuje hello* /$ obj-> regularne funkcja (); /* drukuje świat! */ 

Funkcje statyczne mogą używać tylko zmiennych statycznych. Funkcje statyczne i zmienne są odwoływane przez samego siebie::funkcja () lub samego siebie::Variablename. W powyższym przykładzie zmienne statyczne są odwoływane do nazwy klasy (ExampleClass :: $ foo) lub, z samego siebie:: (self :: $ foo), gdy jest używany w metodzie statycznej [Nazwany STATICFUNCTION ()].

Regularne funkcje i zmienne klasy wymagają odniesienia kontekstu obiektu. Nie mogą istnieć bez kontekstu obiektu. Kontekst obiektu jest dostarczany przez $ to. W powyższym przykładzie $ bar jest zmienną zwykłą, dlatego jest nazywany jako $ obj-> pasek (w kontekście obiektu ze zmienną obj) lub jako $ this-> pasek (ponownie w kontekście obiektu w metodzie obiektu).

samego siebie nie używa poprzedniego $ ponieważ samego siebie nie łączy zmiennej, ale klasa konstruuje się. $ to odwołuje się do określonej zmiennej, aby miała poprzednia $.