Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wywołanie kilku metod na rzecz jednego obiektu.
Forum PHP.pl > Forum > PHP
demoniczny
Czy mógł by mi ktoś wytłumaczyć jak to jest z obiektami które odwołują się do kilku metod na raz.
Mam na myśli $obiekt->metoda()->metoda()->metoda(); Są to metody zagnieżdżone w sobie czy jakoś inaczej?

Próbowałem to zrozumieć i eksperymentowałem ale dostaje errory.

A może tak naprawde to jest takie wywołanie :
$obiekt->metoda();
$obiekt->metoda();
$obiekt->metoda();

tylko że tamten zapis jest czytelniejszy?
Adi32
Aby uzyskać efekt łańcucha jedyne co musisz zrobić to na końcu metody zwrócić instancję obiektu czyli:

  1. return $this;


Jest to możliwe zawsze gdy metoda nie musi zwracać jakiejś innej wartości.
demoniczny
Ale powiedz mi czy ma to jakieś konkretniejsze zastosowanie?

i tylko metody zwracające void? mogą tak być?

Ogólnie widziałem że często się to stosuje ale nie czaje ;/
Mógł by ktoś dać lekturę na ten temat?
Adi32
Cytat(demoniczny @ 9.01.2012, 22:04:12 ) *
Ale powiedz mi czy ma to jakieś konkretniejsze zastosowanie?

i tylko metody zwracające void? mogą tak być?

Ogólnie widziałem że często się to stosuje ale nie czaje ;/
Mógł by ktoś dać lekturę na ten temat?


Niestety ja Ci na ten temat nic więcej nie powiem. Wydaje mi się, że to jest bo po prostu 'tak wyszło że się da' i tyle.
Jak trzeba się odwoływać kilka razy do obiektu to dlaczgo właśnie nie łańcuchem?
Wiadomo, mógłbyś sobie zrobić metodę, która od razu przyjmie wszystkie parametry i wyśle do odpowiednich metod ale metod i funkcji z większą ilością parametrów się unika.
ShadowD
Jeśli masz funkcję z x parametrami to by dostać się do x-1 musiał byś uzupełnić wszystkie począwszy po kolej, a co w wypadku gdy np x-2 i x-4 nie jest Ci do niczego potrzebna? To takie wyjaśnienie z niskiej półki, a przykładem z życia jest np. biblioteka do mysql.

Weźmy funkcję mysql która jest opakowaniem dla jakiegoś tam zapytania (bardzo prostego na potrzeby wyjaśnienia), musisz podać zawsze nazwę tabeli i chcesz wybrać wszystkie rekordy posortowane po id malejąco

1. Dla funkcji:
pobierz(TABELA,WARUNEK,JAKIEŚ TAM INNE POLA,KOLEJNOŚĆ,MALEJĄCO/ROSNĄCO)
2. Dla klasy:
pobierz(TABELA)->sort(KOLEJNOŚĆ)->po(MALEJĄCO/ROSNĄCO)

Świetnie widać po długości co się ładniej i łatwiej pisze, nie komentując łatwiejszego zrozumienia - patrzysz i od razu widzisz czego szukasz, nie zaglądając do funkcji (pomijam ide).

Teraz wyjaśnienie dlaczego łańcuchowo, niby w jakim celu powtarzać kod i pisać ciągle:
pobierz(TABELA)->sort(KOLEJNOŚĆ)
pobierz(TABELA)->po(MALEJĄCO/ROSNĄCO)

Wszystko idzie w stronę wygody w programowaniu, dla pc nie jest to coś znacznie innego, ale dla człowieka jest łatwiejsze i milsze w obsłudze. ;-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.