Iterowalne PHP
PHP — co to jest iterowalny?
Iterowalna to dowolna wartość, którą można zapętlić za pomocą foreach()
pętli.
Pseudotyp iterable
został wprowadzony w PHP 7.1 i może być używany jako typ danych dla argumentów funkcji i wartości zwracanych przez funkcje.
PHP — korzystanie z elementów iteracyjnych
Słowo iterable
kluczowe może być użyte jako typ danych argumentu funkcji lub jako typ zwracany funkcji:
Przykład
Użyj iterowalnego argumentu funkcji:
<?php
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
$arr = ["a",
"b", "c"];
printIterable($arr);
?>
Przykład
Zwróć iterowalny:
<?php
function getIterable():iterable {
return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
echo $item;
}
?>
PHP — tworzenie elementów iterowalnych
Tablice
Wszystkie tablice są iterowalne, więc każda tablica może być użyta jako argument funkcji, która wymaga iteracji.
Iteratory
Dowolny obiekt, który implementuje Iterator
interfejs, może być użyty jako argument funkcji wymagającej iteracji.
Iterator zawiera listę elementów i zapewnia metody ich przeglądania. Utrzymuje wskaźnik do jednego z elementów na liście. Każda pozycja na liście powinna mieć klucz, którego można użyć do znalezienia pozycji.
Iterator musi mieć następujące metody:
current()
— Zwraca element, na który aktualnie wskazuje wskaźnik. Może to być dowolny typ danychkey()
Zwraca klucz skojarzony z bieżącym elementem na liście. Może to być tylko liczba całkowita, liczba zmiennoprzecinkowa, wartość logiczna lub łańcuchnext()
Przenosi wskaźnik do następnego elementu na liścierewind()
Przenosi wskaźnik do pierwszego elementu na liścievalid()
Jeśli wewnętrzny wskaźnik nie wskazuje na żaden element (na przykład, jeśli next() zostało wywołane na końcu listy), powinno to zwrócić false. W każdym innym przypadku to się sprawdza
Przykład
Zaimplementuj interfejs Iteratora i użyj go jako elementu iteracyjnego:
<?php
// Create an Iterator
class MyIterator implements Iterator {
private $items = [];
private $pointer = 0;
public
function __construct($items) {
// array_values() makes
sure that the keys are numbers
$this->items =
array_values($items);
}
public function current() {
return $this->items[$this->pointer];
}
public function
key() {
return $this->pointer;
}
public function next() {
$this->pointer++;
}
public function rewind() {
$this->pointer =
0;
}
public function valid() {
// count() indicates how many items are in the list
return $this->pointer < count($this->items);
}
}
// A
function that uses iterables
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
// Use the iterator as an iterable
$iterator = new MyIterator(["a", "b", "c"]);
printIterable($iterator);
?>