Treci la conținutul principal

Obiecte iterabile în PHP

O valoare iterabilă în PHP este orice valoare pe care o poți parcurge cu o buclă foreach().

PHP 7.1 a adăugat iterable ca pseudo-tip, pe care îl poți folosi pentru argumentele funcțiilor și pentru valorile returnate.

Se încadrează două feluri de valori: tablourile și obiectele care implementează interfața Iterator.


PHP - Folosirea valorilor iterabile

Scrie iterable ca tip al unui parametru de funcție sau ca tip returnat de funcție:

Exemplu

O funcție care acceptă un parametru iterabil, apelată o dată cu un tablou și o dată cu un obiect:

Prompt
Creează o funcție PHP numită printIterable care primește un parametru iterable și afișează cu echo fiecare element. Apelează-o cu un tablou ["a", "b", "c"] și de asemenea cu un obiect ArrayIterator care conține ["d", "e", "f"].
Ieșire: script PHP

Exemplu

O funcție al cărei tip returnat este iterabil:

Prompt
Creează o funcție PHP numită getIterable care are tipul de retur iterable și returnează tabloul ["a", "b", "c"]. Folosește o buclă foreach pentru a afișa cu echo fiecare element din valoarea iterabilă returnată.
Ieșire: script PHP

PHP - Crearea valorilor iterabile

Orice tablou este iterabil, așa că poți transmite orice tablou unei funcții care așteaptă o valoare iterabilă.

La fel și cu obiectele: orice obiect care implementează Iterator este acceptat și el.

Un iterator păstrează o listă de elemente și îți oferă metode pentru a te deplasa prin ele. Menține un pointer pe câte un element al listei, iar fiecare element ar trebui să aibă o cheie care poate fi folosită pentru a-l localiza.

Iteratorul tău trebuie să definească aceste cinci metode:

  • current() - Returnează elementul aflat sub pointer, care poate fi de orice tip de date
  • key() - Returnează cheia elementului curent, care poate fi doar un număr întreg, un număr zecimal, o valoare booleană sau un șir de caractere
  • next() - Avansează pointerul cu un element
  • rewind() - Readuce pointerul la primul element
  • valid() - Returnează true atât timp cât pointerul intern se află pe un element. Ar trebui să returneze false când pointerul nu se află pe niciun element, de exemplu după ce next() a fost apelată la sfârșitul listei

Exemplu

Aici, o clasă implementează Iterator, iar obiectul ei este apoi transmis unei funcții ca valoare iterabilă:

Prompt
Creează o clasă PHP numită MyIterator care implementează interfața Iterator cu metodele current(), key(), next(), rewind() și valid(). Apoi creează o funcție printIterable() care parcurge o valoare iterabilă și afișează cu echo fiecare element. Folosește MyIterator cu elementele ["a", "b", "c"].
Ieșire: script PHP