PHP - obiektowe PHP - stałe klasowe oraz metody statyczne
| DZIAŁANIE: |
liczba Pi to : 3.14159 Mnożenie : 256 |
Kod:

Ewentualne Objaśnienia:
W 4 wersji PHP przekazywanie obiektów odbywało się przez wartość, a
teraz dzieje się to przez odwołanie . Polecenie tworzące nowy obiekt,
które już znamy czyli zapis typu : $nowy = new jakasKlasa(); - tworzyło nową
klasę, po czym kopiowało jej egzemplarz do zmiennej $nowy - tworząc właściwie 2
egzemplarze i zaraz potem jeden z nich usuwając. Fakt taki może powodować
problemy zakładając, że obiekty są przekazywane przez odwołanie, zwłaszcza gdy
przekazujemy je do funkcji.
Większość języków, które są zorientowane obiektowo domyślnie przekazuje obiekty
właśnie przez odwołanie no i nasze poczciwe PHP od jakiegoś czasu również.
Niegdyś PHP miał problem z przywoływaniem obiektów zwróconych prze funkcje, a
dokładnie z wywołaniem metod na tych obiektach. Nie można było zapisać czegoś
typu : wybierz_obiekty()->pokaz(); - gdzie funkcja wybierz_obiekt() zwracała
obiekt posiadający metodę o nazwie pokaz().
Obecnie taka konstrukcja jest wykonywana prze PHP bez problemu.
Stała klasowa - w PHP 5 pojawia się właśnie coś takiego - można jej
używać bez konieczności tworzenia egzemplarza klasy (obiektu). Widać to w naszym
przykładzie - używamy tutaj słowa const i określamy tutaj stałą pi o
danej wartości. Jak widać poza klasą dostęp do stałej uzyskujemy poprzez
operator :: - wskazuje on klasę, do której należy stała jak w naszym
przykładzie.
Aby wewnątrz klasy uzyskać dostęp do stałej należy odnieść się do niej za pomocą
słowa kluczowego self - przykładowo tutaj byłoby to self::pi .
Metoda statyczna - tutaj używamy słowa static - zapewne kojarzycie go z funkcji kiedy chcieliśmy aby jakaś zmienna w ciele funkcji miała przypisywaną wartość tylko 1 raz. Tutaj znaczenie jest inne, używamy tego również do funkcji ale umieszczamy przed deklaracją jej czyli static function nazwa... Dzięki temu metoda danej klasy może być wywołana bez konieczności wcześniejszego tworzenia egzemplarza klasy. Taka metoda stanowi odpowiednik stałej klasowej. Również widać to na przykładzie - odwołujemy się do funkcji kwadrat (przekazując parametr) w podobny sposób jak w stałych klasowych poprzez operator :: .
W zasięgu metody statycznej nie można używać $this ponieważ podczas przed jej wywołaniem nie tworzymy żadnego egzemplarza klasy, w której się ona znajduje. Zamiast $this należy zastosować self .
Przypominam, że dla zmiennych static powoduje, że dana składowa jest wspólna dla wszystkich obiektów danej klasy. Zmiana wartości składowej w jednym obiekcie automatycznie zmienia je we wszystkich obiektach tej samej klasy.