Nowości w PHP 5.5 część 3 – Generatory

Witam w przedostanim poście poświęconym nowością jakie można znaleźć w PHP 5.5. Ktoś może się zapytać: „Jak to już koniec? Przecież zmian jest na pewno znacznie więcej! ”. Zgadza się – ten stan rzeczy wyjaśnię na końcu wpisu – teraz chciałbym opisać generatory.

Generatory

Generatory nie są jakąś nowością. Można je spotkać w większości obiektowych języków programowania. Generalnie rzecz ujmując służą do prostego tworzenia Iteratorów. Aby wyjaśnić ich działanie w pierwszej kolejności pokaże jak w tradycyjny sposób tworzony jest Iterator:

Przykładowy Iterator nie robi nic specjalnie użytecznego – nie zmienia to faktu, że trochę kodu napisać trzeba było – nawet dla tego wręcz prostackiego przykładu. A teraz pokaże jak można to zrobić zaprzęgając do pracy generator:

Teraz pora na wyjaśnienia. Otóż zamiast klasy mamy funkcję. W tej funkcji pojawia się nowe słowo kluczowe – yield. Słowo to zachowuje się trochę podobnie jak return z tym, że nie kończy działania funkcji ale zatrzymuje i zwraca aktualną wartość. Umieszczenie yield w funkcji automatycznie czyni ja generatorem.

I teraz uwaga – generator nie może zwracać wartość poprzez return (np. return false;) – skończy się to Fatal Errorem. Można za to wstawić „pustego” returna i wtedy nic złego się nie stanie – zwrócony zostanie obiekt Generatora.

Jeśli na obiekcie zwróconym przez geneator wykonamy coś takiego:

to okaże się że obiekt Generatora implementuje interface Iterator i Traversable – co znaczy, że możemy go swobodnie używać pętli foreach. Możemy także korzystać z dobrodziejstw funkcji send(), next(), current() etc. Jak widać bardzo pożyteczna rzecz te generatory 😉

Tyle o nich – teraz czas na wyjaśnienie dlaczego to przedostatni wpis dotyczący nowości w PHP 5.5. Otóż moją intencją było przedstawienie wg mnie najważniejszych zmian w nowej wersji PHP. Jest ich oczywiście znacznie więcej i starczyło by jeszcze na klika postów. Jednak przyszedł mi inny pomysł do głowy i postanowiłem przygotować… niespodziankę, która mam nadzieję ułatwi wam zapoznanie się z nowościami jakie można znaleźć w PHP 5.5. Szczegóły w ostatnim czwartym poście im poświęconym. Pozdrawiam! 😉

Posty które mogą Cię zainteresować:

6 Responses to Nowości w PHP 5.5 część 3 – Generatory
  1. phpsycho Odpowiedz

    Ciekawie opisujesz owe zmiany, jednak czuje lekki niedosyt. Jak dla mnie osobiscie jeden przyklad to zdecydowanie za malo. Ciezko rozgryzc to yield,ale mimo wszystko dzieki za post 🙂

    • Michał Janicki Odpowiedz

      Z chęcią napiszę na ten temat znacznie więcej – jednak brak czasu nie pozwala mi na pisanie tak często jak bym chciał.

      • phpsycho Odpowiedz

        Jasne, rozumiem. Kazdy ma swoje zycie, Ty je poswiecasz by innym pomagac to i tak spore poswiecenie. Zatem czekam z niecierpliwoscia na dalsze posty! A yielda juz rozgryzlem 😉

        • Michał Janicki Odpowiedz

          Cieszę się że Ci się udało 😉

  2. Gosc Odpowiedz

    Nazwa funkcji jest błędna, Jest TestIteratotr powinno być TestIterator.

    • Michał Janicki Odpowiedz

      Tak masz rację – dzięki za info – poprawione 😉

Dodaj komentarz

Your email address will not be published. Please enter your name, email and a comment.