PHP - obiektowe PHP - przeciążanie metod
| DZIAŁANIE: |
Jest to tablica danych Jest to obiekt Są to dane innego rodzaju niż obiekt czy tablica |
Kod:

Ewentualne Objaśnienia:
Kolejna metoda specjalna to __call używana do przeciążania dowolnej metody klasy. Przeciążenie jest dość istotną metodą we wszelkich językach programowania zorientowanych obiektowo, jednak w PHP nie jest tak bardzo istotne. Przeciążanie jest przydatne kiedy jedna funkcja ( na przykład jakieś oblicz pole ) będzie działać inaczej dla danego typu danych czy obiektu.
Metoda __call powinna przyjmować 2 argumenty :
- nazwę wywołanej metody
- tablicę parametrów przekazywanej do tej metody ( rzecz jasna nie zawsze będzie
to tablica )
W naszym prostym przykładzie mamy pierw zadeklarowane 3 funkcje wyświetlające informacje o typie danych czyli obiekt, tablica lub inny typ. Nasza specjalna funkcja __call jak wiecie przyjmuje 2 parametry no i dalej jeżeli nazwa wywołanej metody to sprawdz ( zwróćcie uwagę, że nie trzeba jej nigdzie implementować ) sprawdzamy drugi parametr - sprawdzamy jaki to typ danych. Funkcja is_object sprawdza czy jest to obiekt i jeżeli tak to wywoływana jest funkcja toObiekt no i rzecz jasna ona wyświetla komunikat, że jest to obiekt. Funkcja is_array - sprawdza czy nasze dane to tablica, jeżeli tak wywołuje odpowiednią funkcję. Jeżeli są to jeszcze inne dane czyli na przykład jakiś ciąg znaków wywoływana jest funkcja toCosinnego .
Ten prosty przykład myślę bardzo dobrze to obrazuje, jak widzicie funkcja sprawdz ma generalnie wiele znaczeń, działań zależnie od tego na jaki typ danych ją stosujemy.
Dobry przykład to na przykład klasy kwadrat, koło i na przykład trójkąt. Każda klasa miałaby swoją funkcję do obliczania pola. Wywołujemy sobie funkcję obliczania pola dla każdego z obiektów, każdy z nich jest inną figurą no i zależnie od tego jaki to typ, czyli niejako jaka figura obliczane jest pole odpowiednią funkcją. Rzecz jasna można by było to zrobić przez jakąś klasę abstrakcyjną Figura i kolejne dziedziczące Kwadrat, Koło itp... to tylko taki przykład.
Zwróć uwagę, że dzięki __call uzyskujemy dostęp nawet do metod, które w klasie nie istnieją (!).