PHP-Iterables
PHP - Was ist ein Iterable?
Ein Iterable ist ein beliebiger Wert, der mit einer foreach()
Schleife durchlaufen werden kann.
Der iterable
Pseudotyp wurde in PHP 7.1 eingeführt und kann als Datentyp für Funktionsargumente und Funktionsrückgabewerte verwendet werden.
PHP - Verwendung von Iterables
Das iterable
Schlüsselwort kann als Datentyp eines Funktionsarguments oder als Rückgabetyp einer Funktion verwendet werden:
Beispiel
Verwenden Sie ein iterierbares Funktionsargument:
<?php
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
$arr = ["a",
"b", "c"];
printIterable($arr);
?>
Beispiel
Geben Sie ein Iterable zurück:
<?php
function getIterable():iterable {
return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
echo $item;
}
?>
PHP - Erstellen von Iterables
Arrays
Alle Arrays sind Iterables, sodass jedes Array als Argument einer Funktion verwendet werden kann, die ein Iterable erfordert.
Iteratoren
Jedes Objekt, das die Iterator
Schnittstelle implementiert, kann als Argument einer Funktion verwendet werden, die ein Iterable erfordert.
Ein Iterator enthält eine Liste von Elementen und stellt Methoden bereit, um sie zu durchlaufen. Es hält einen Zeiger auf eines der Elemente in der Liste. Jedes Element in der Liste sollte einen Schlüssel haben, der verwendet werden kann, um das Element zu finden.
Ein Iterator muss diese Methoden haben:
current()
- Gibt das Element zurück, auf das der Zeiger gerade zeigt. Es kann ein beliebiger Datentyp seinkey()
Gibt den Schlüssel zurück, der dem aktuellen Element in der Liste zugeordnet ist. Es kann nur ein Integer, Float, Boolean oder String seinnext()
Bewegt den Zeiger zum nächsten Element in der Listerewind()
Bewegt den Zeiger zum ersten Element in der Listevalid()
Wenn der interne Zeiger auf kein Element zeigt (zum Beispiel, wenn next() am Ende der Liste aufgerufen wurde), sollte dies false zurückgeben. In allen anderen Fällen wird true zurückgegeben
Beispiel
Implementieren Sie die Iterator-Schnittstelle und verwenden Sie sie als 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);
?>