PHP-iterables
PHP - Wat is een Iterable?
Een iterabel is elke waarde die kan worden doorlopen met een foreach()
lus.
Het iterable
pseudo-type is geïntroduceerd in PHP 7.1 en kan worden gebruikt als een gegevenstype voor functieargumenten en functieretourwaarden.
PHP - Iterables gebruiken
Het iterable
sleutelwoord kan worden gebruikt als een gegevenstype van een functieargument of als het retourtype van een functie:
Voorbeeld
Gebruik een itereerbaar functieargument:
<?php
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
$arr = ["a",
"b", "c"];
printIterable($arr);
?>
Voorbeeld
Retourneer een iterabel:
<?php
function getIterable():iterable {
return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
echo $item;
}
?>
PHP - Iterables maken
arrays
Alle arrays zijn iterables, dus elke array kan worden gebruikt als argument van een functie waarvoor een iterable nodig is.
iterators
Elk object dat de Iterator
interface implementeert, kan worden gebruikt als argument van een functie waarvoor een iterable nodig is.
Een iterator bevat een lijst met items en biedt methoden om er doorheen te lopen. Het houdt een verwijzing naar een van de elementen in de lijst. Elk item in de lijst moet een sleutel hebben die kan worden gebruikt om het item te vinden.
Een iterator moet deze methoden hebben:
current()
- Retourneert het element waarnaar de aanwijzer momenteel verwijst. Het kan elk gegevenstype zijnkey()
Retourneert de sleutel die is gekoppeld aan het huidige element in de lijst. Het kan alleen een geheel getal, float, boolean of string zijnnext()
Verplaatst de aanwijzer naar het volgende element in de lijstrewind()
Verplaatst de aanwijzer naar het eerste element in de lijstvalid()
Als de interne aanwijzer niet naar een element verwijst (bijvoorbeeld als next() aan het einde van de lijst werd aangeroepen), zou dit false moeten retourneren. In elk ander geval wordt true geretourneerd
Voorbeeld
Implementeer de Iterator-interface en gebruik deze als een iterable:
<?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);
?>