Iteráveis PHP
PHP - O que é um Iterável?
Um iterável é qualquer valor que pode ser repetido com um foreach()
loop.
O iterable
pseudo-tipo foi introduzido no PHP 7.1 e pode ser usado como um tipo de dados para argumentos de função e valores de retorno de função.
PHP - Usando Iteráveis
A iterable
palavra-chave pode ser usada como um tipo de dados de um argumento de função ou como o tipo de retorno de uma função:
Exemplo
Use um argumento de função iterável:
<?php
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
$arr = ["a",
"b", "c"];
printIterable($arr);
?>
Exemplo
Retorna um iterável:
<?php
function getIterable():iterable {
return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
echo $item;
}
?>
PHP - Criando Iteráveis
Matrizes
Todos os arrays são iteráveis, então qualquer array pode ser usado como argumento de uma função que requer um iterável.
Iteradores
Qualquer objeto que implemente a Iterator
interface pode ser usado como argumento de uma função que requer um iterável.
Um iterador contém uma lista de itens e fornece métodos para percorrê-los. Ele mantém um ponteiro para um dos elementos da lista. Cada item na lista deve ter uma chave que pode ser usada para encontrar o item.
Um iterador deve ter estes métodos:
current()
- Retorna o elemento para o qual o ponteiro está apontando no momento. Pode ser qualquer tipo de dadoskey()
Retorna a chave associada ao elemento atual na lista. Só pode ser um inteiro, float, boolean ou stringnext()
Move o ponteiro para o próximo elemento na listarewind()
Move o ponteiro para o primeiro elemento da listavalid()
Se o ponteiro interno não estiver apontando para nenhum elemento (por exemplo, se next() foi chamado no final da lista), isso deve retornar false. Retorna true em qualquer outro caso
Exemplo
Implemente a interface Iterator e use-a como iterável:
<?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);
?>