Itérables PHP
PHP - Qu'est-ce qu'un itérable ?
Un itérable est une valeur qui peut être bouclée avec une foreach()
boucle.
Le iterable
pseudo-type a été introduit dans PHP 7.1 et peut être utilisé comme type de données pour les arguments de fonction et les valeurs de retour de fonction.
PHP - Utilisation des itérables
Le iterable
mot clé peut être utilisé comme type de données d'un argument de fonction ou comme type de retour d'une fonction :
Exemple
Utilisez un argument de fonction itérable :
<?php
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
$arr = ["a",
"b", "c"];
printIterable($arr);
?>
Exemple
Renvoie un itérable :
<?php
function getIterable():iterable {
return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
echo $item;
}
?>
PHP - Création d'itérables
Tableaux
Tous les tableaux sont itérables, donc n'importe quel tableau peut être utilisé comme argument d'une fonction qui nécessite un itérable.
Itérateurs
Tout objet qui implémente l' Iterator
interface peut être utilisé comme argument d'une fonction qui nécessite un itérable.
Un itérateur contient une liste d'éléments et fournit des méthodes pour les parcourir en boucle. Il conserve un pointeur sur l'un des éléments de la liste. Chaque élément de la liste doit avoir une clé qui peut être utilisée pour trouver l'élément.
Un itérateur doit avoir ces méthodes :
current()
- Renvoie l'élément sur lequel le pointeur pointe actuellement. Il peut s'agir de n'importe quel type de donnéeskey()
Renvoie la clé associée à l'élément courant dans la liste. Il ne peut s'agir que d'un entier, d'un flottant, d'un booléen ou d'une chaînenext()
Déplace le pointeur vers l'élément suivant dans la listerewind()
Déplace le pointeur sur le premier élément de la listevalid()
Si le pointeur interne ne pointe sur aucun élément (par exemple, si next() a été appelé à la fin de la liste), cela devrait renvoyer false. Il renvoie vrai dans tous les autres cas
Exemple
Implémentez l'interface Iterator et utilisez-la comme un itérable :
<?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);
?>