Taller > PHP > Program. Objetos
¿Qué son los Iterables en PHP?
En PHP, un iterable es cualquier valor que puede ser recorrido con un bucle foreach. Los iterables permiten procesar colecciones de datos, como arrays y objetos que implementen la interfaz Iterator.
PHP introdujo el tipo pseudo-iterable en la versión 7.1, y este se puede utilizar como tipo de dato para los argumentos de funciones o para los valores de retorno de una función. Esto facilita trabajar con colecciones de datos de manera más flexible.
Uso de Iterables en PHP
Puedes usar la palabra clave iterable para indicar que una función acepta un iterable como argumento o que devuelve un iterable como resultado.
Ejemplo 1: Función que acepta un iterable
<?php
function mostrarElementos(iterable $datos) {
foreach ($datos as $item) {
echo $item . "\n";
}
}
$lista = ["manzana", "plátano", "naranja"];
mostrarElementos($lista);
?>
Explicación del código
Función mostrarElementos(): Acepta un iterable como argumento. Este puede ser un array u otro tipo de iterable.
Array $lista: Es un iterable, por lo que puede ser pasado a la función.
Bucle foreach: Itera sobre los elementos del array y los imprime.
Ejemplo 2: Función que devuelve un iterable
<?php
function obtenerElementos(): iterable {
return ["perro", "gato", "conejo"];
}
$animales = obtenerElementos();
foreach ($animales as $animal) {
echo $animal . "\n";
}
?>
Explicación del código Función obtenerElementos(): Devuelve un iterable, en este caso un array de animales.
Iteración: El iterable devuelto es recorrido utilizando un bucle foreach.
Creación de Iterables en PHP
Arrays como Iterables
Todos los arrays en PHP son iterables. Esto significa que cualquier array puede ser usado como argumento de una función que acepte un iterable, o como valor de retorno en una función que devuelva un iterable.
Objetos que Implementan la Interfaz Iterator
Los objetos que implementan la interfaz Iterator también pueden ser utilizados como iterables. Un iterador es un objeto que contiene una lista de elementos y métodos que permiten recorrer esa lista.
Métodos necesarios para implementar Iterator:
current(): Devuelve el elemento actual.
key(): Devuelve la clave del elemento actual.
next(): Mueve el puntero al siguiente elemento.
rewind(): Reinicia el puntero al primer elemento.
valid(): Verifica si el puntero actual está en un elemento válido.
Ejemplo: Implementación de un Iterador
<?php
class MiIterador implements Iterator {
private $elementos = [];
private $indice = 0;
public function __construct($elementos) {
$this->elementos = array_values($elementos);
}
public function current() {
return $this->elementos[$this->indice];
}
public function key() {
return $this->indice;
}
public function next() {
$this->indice++;
}
public function rewind() {
$this->indice = 0;
}
public function valid() {
return isset($this->elementos[$this->indice]);
}
}
$iterador = new MiIterador(["rojo", "verde", "azul"]);
foreach ($iterador as $clave => $valor) {
echo "Clave: $clave, Valor: $valor\n";
}
?>
Explicación del código
Clase MiIterador: Implementa la interfaz Iterator y define los métodos necesarios para iterar sobre los elementos.
Método current(): Devuelve el valor del elemento actual.
Método key(): Devuelve la clave del elemento actual.
Método next(): Avanza el puntero al siguiente elemento.
Método rewind(): Reinicia el puntero al primer elemento.
Método valid(): Verifica si el puntero actual está en un elemento válido dentro de la lista.
Uso de Iteradores como Iterables
Una vez que se ha implementado un iterador, puedes utilizarlo como un iterable en cualquier función que lo requiera. Esto permite una mayor flexibilidad al trabajar con colecciones de datos.
Ejemplo: Uso de un iterador personalizado como iterable
<?php
function mostrarIterador(iterable $datos) {
foreach ($datos as $clave => $valor) {
echo "Clave: $clave, Valor: $valor\n";
}
}
$miIterador = new MiIterador([1, 2, 3, 4, 5]);
mostrarIterador($miIterador);
?>
Explicación del código
Función mostrarIterador(): Acepta cualquier iterable, incluido un objeto que implemente Iterator.
Objeto $miIterador: Es una instancia de la clase MiIterador y se pasa a la función como argumento.
Conclusión
Los iterables en PHP proporcionan una manera flexible de trabajar con colecciones de datos, permitiendo iterar sobre arrays y objetos que implementan la interfaz Iterator.
El uso del tipo iterable facilita la creación de funciones que acepten múltiples tipos de estructuras de datos, aumentando la reutilización y simplicidad del código. Los iteradores personalizados permiten un mayor control sobre cómo se procesan y recorren los datos.