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.