Iterabili PHP
PHP - Che cos'è un iterabile?
Un iterabile è qualsiasi valore che può essere riprodotto in loop con un foreach()
ciclo.
Lo iterable
pseudo-tipo è stato introdotto in PHP 7.1 e può essere utilizzato come tipo di dati per argomenti di funzioni e valori di ritorno di funzioni.
PHP - Utilizzo degli iterabili
La iterable
parola chiave può essere utilizzata come tipo di dati di un argomento di funzione o come tipo restituito di una funzione:
Esempio
Usa un argomento di funzione iterabile:
<?php
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
$arr = ["a",
"b", "c"];
printIterable($arr);
?>
Esempio
Restituisce un iterabile:
<?php
function getIterable():iterable {
return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
echo $item;
}
?>
PHP - Creazione di iterabili
Matrici
Tutti gli array sono iterabili, quindi qualsiasi array può essere utilizzato come argomento di una funzione che richiede un iterabile.
Iteratori
Qualsiasi oggetto che implementa l' Iterator
interfaccia può essere utilizzato come argomento di una funzione che richiede un iterabile.
Un iteratore contiene un elenco di elementi e fornisce metodi per scorrerli. Mantiene un puntatore a uno degli elementi nell'elenco. Ciascun elemento nell'elenco dovrebbe avere una chiave che può essere utilizzata per trovare l'elemento.
Un iteratore deve avere questi metodi:
current()
- Restituisce l'elemento a cui punta il puntatore. Può essere qualsiasi tipo di datikey()
Restituisce la chiave associata all'elemento corrente nell'elenco. Può essere solo un numero intero, float, booleano o stringanext()
Sposta il puntatore all'elemento successivo nell'elencorewind()
Sposta il puntatore sul primo elemento dell'elencovalid()
Se il puntatore interno non punta a nessun elemento (ad esempio, se next() è stato chiamato alla fine dell'elenco), questo dovrebbe restituire false. Restituisce vero in ogni altro caso
Esempio
Implementa l'interfaccia Iterator e usala come iterabile:
<?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);
?>