PHP Iterables
PHP - Wat is 'n Iterable?
'n Herhaalbare is enige waarde wat met 'n foreach()
lus deurgelus kan word.
Die iterable
pseudo-tipe is in PHP 7.1 bekendgestel, en dit kan gebruik word as 'n datatipe vir funksie-argumente en funksie-terugstuurwaardes.
PHP - Gebruik Iterables
Die iterable
sleutelwoord kan gebruik word as 'n datatipe van 'n funksie-argument of as die terugkeertipe van 'n funksie:
Voorbeeld
Gebruik 'n herhaalbare funksie-argument:
<?php
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
$arr = ["a",
"b", "c"];
printIterable($arr);
?>
Voorbeeld
Gee 'n herhaalbare terug:
<?php
function getIterable():iterable {
return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
echo $item;
}
?>
PHP - Skep Iterables
Skikkings
Alle skikkings is iterables, so enige skikking kan gebruik word as 'n argument van 'n funksie wat 'n iterable vereis.
Iterators
Enige voorwerp wat die Iterator
koppelvlak implementeer kan gebruik word as 'n argument van 'n funksie wat 'n iterable vereis.
'n Iterator bevat 'n lys items en bied metodes om deur hulle te loop. Dit hou 'n wyser na een van die elemente in die lys. Elke item in die lys moet 'n sleutel hê wat gebruik kan word om die item te vind.
'n Iterator moet hierdie metodes hê:
current()
- Wys die element waarna die wyser tans wys. Dit kan enige datatipe weeskey()
Wys die sleutel wat met die huidige element in die lys geassosieer word. Dit kan slegs 'n heelgetal, vlot, boolean of string weesnext()
Beweeg die wyser na die volgende element in die lysrewind()
Beweeg die wyser na die eerste element in die lysvalid()
As die interne wyser nie na enige element wys nie (byvoorbeeld as next() aan die einde van die lys geroep is), behoort dit vals terug te gee. Dit keer waar in enige ander geval
Voorbeeld
Implementeer die Iterator-koppelvlak en gebruik dit as 'n 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);
?>