Self vs. To w PHP
- 2206
- 590
- Patrycy Ziółkowski
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
samego siebie | Ten | |
---|---|---|
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 $.