Iteración de objetos en PHP
Bienvenido a una nueva lección de nuestro curso básico de PHP 8. Hoy nos metemos con la iteración de objetos, una técnica súper útil para explorar las propiedades de tus objetos como si fueran un mapa. Si ya manejas clases y herencia, esto te dará más control sobre tus datos. Todo va a ser claro, práctico y con ejemplos que te van a flipar. ¡Empecemos!
¿Qué es la iteración de objetos?
Iterar un objeto significa recorrer sus propiedades (atributos) una por una, como si hojeas un cuaderno para ver cada página. En PHP, puedes usar un bucle foreach
para acceder a las propiedades públicas de un objeto desde fuera o a todas (públicas, privadas, protegidas) desde dentro de la clase. Es ideal para inspeccionar datos o hacer operaciones con ellos.
La receta básica para iterar es esta:
foreach ($objeto as $clave => $valor) { // Hacer algo con $clave (nombre de la propiedad) y $valor (su valor) }
- Fuera de la clase: Solo ves propiedades
public
. - Dentro de la clase: Puedes ver todo (
public
,private
,protected
).
Probando iteración de objetos
¡Manos a la obra! Crea un archivo iteracion_objetos.php
en curso_php8
(dentro de C:\xampp\htdocs
) y prueba esto:
Ejemplo 1: Clase Laptop
<?php class Laptop { public $marca; public $modelo; public $color; private $serie; public function __construct($marca, $modelo, $color, $serie) { $this->marca = $marca; $this->modelo = $modelo; $this->color = $color; $this->serie = $serie; } public function iterarLaptop() { echo "Iterando desde dentro de la clase Laptop:<br>"; foreach ($this as $clave => $valor) { echo "$clave => $valor<br>"; } } } $laptop = new Laptop("Apple", "MacBook Pro", "Blanco", "2131234212"); // Iterar fuera de la clase echo "Iterando desde fuera de la clase Laptop:<br>"; foreach ($laptop as $clave => $valor) { echo "$clave => $valor<br>"; } echo "<br>"; // Iterar dentro de la clase $laptop->iterarLaptop(); ?>
Abre http://localhost/curso_php8/iteracion_objetos.php
. Verás algo como:
Iterando desde fuera de la clase Laptop: marca => Apple modelo => MacBook Pro color => Blanco Iterando desde dentro de la clase Laptop: marca => Apple modelo => MacBook Pro color => Blanco serie => 2131234212
¿Qué pasó?
- Fuera: Solo vimos las propiedades
public
(marca
,modelo
,color
). La propiedadprivate $serie
está oculta por encapsulación. - Dentro: El método
iterarLaptop()
ve todo, incluyendo$serie
, porque está dentro de la clase.
Ejemplo 2: Clase Persona
<?php class Persona { public $nombre; public $edad; public function __construct($nombre, $edad) { $this->nombre = $nombre; $this->edad = $edad; } } $persona1 = new Persona("Juan", 30); echo "Iterando objeto Persona:<br>"; foreach ($persona1 as $clave => $valor) { echo "$clave: $valor<br>"; } ?>
Resultado:
Iterando objeto Persona: nombre: Juan edad: 30
¿Qué pasó?
Iteramos $persona1
y mostramos sus propiedades públicas directamente.
Ejemplos prácticos para brillar
Ejemplo: Lista de estudiantes
<?php class Estudiante { public $nombre; public $curso; public function __construct($nombre, $curso) { $this->nombre = $nombre; $this->curso = $curso; } } $estudiantes = [ new Estudiante("Ana", "PHP"), new Estudiante("Luis", "JavaScript") ]; echo "Lista de estudiantes:<br>"; foreach ($estudiantes as $est) { foreach ($est as $clave => $valor) { echo "$clave: $valor | "; } echo "<br>"; } ?>
Resultado:
Lista de estudiantes: nombre: Ana | curso: PHP | nombre: Luis | curso: JavaScript |
Ejercicios para practicar
¡Tu turno de de codigo! Ve a curso_php8
y prueba estos retos:
- Lista de personas
Creapersonas_iterar.php
:
<?php class Persona { public $nombre; public $edad; public $pais; public function __construct($nombre, $edad, $pais) { $this->nombre = $nombre; $this->edad = $edad; $this->pais = $pais; } } $personas = [ new Persona("Ana", 25, "México"), new Persona("Carlos", 30, "España"), new Persona("Sofía", 28, "Argentina") ]; echo "Lista de personas:<br>"; foreach ($personas as $persona) { foreach ($persona as $clave => $valor) { echo "$clave: $valor | "; } echo "<br>"; } ?>
- Filtrar libros por puntuación
Crealibros_iterar.php
:
<?php class Libro { public $titulo; public $autor; public $paginas; public $puntuacion; public function __construct($titulo, $autor, $paginas, $puntuacion) { $this->titulo = $titulo; $this->autor = $autor; $this->paginas = $paginas; $this->puntuacion = $puntuacion; } } $libros = [ new Libro("Cien años de soledad", "García Márquez", 417, 5), new Libro("El túnel", "Ernesto Sabato", 140, 4), new Libro("Ficciones", "Jorge Borges", 174, 3) ]; echo "Libros con 4 o más estrellas:<br>"; foreach ($libros as $libro) { if ($libro->puntuacion >= 4) { foreach ($libro as $clave => $valor) { echo "$clave: $valor | "; } echo "<br>"; } } ?>
Ejecuta en localhost/curso_php8/
y juega con los valores.
Consejos para no enredarte
- Encapsulación importa: Desde fuera, solo ves
public
. Usa métodos internos para ver más. - Usa claves: Con
$clave => $valor
, sabes qué propiedad estás mirando. - Prueba dentro y fuera: Compara cómo cambia la iteración según el contexto.
¡A por más POO!
¡Gran trabajo, máquina! Ahora iterar objetos es tu superpoder para explorar propiedades como detective. En la próxima lección, veremos polimorfismo para dar flexibilidad a tus clases. Si algo no te queda claro, déjame un comentario.
Lo que aprendiste hoy:
- Qué es iterar: Recorrer las propiedades de un objeto con
foreach
. - Fuera vs dentro: Solo
public
desde fuera; todo desde dentro. - Ejemplos vivos: Iteraste laptops y personas como pro.
- Practicaste: Listaste personas y filtraste libros como crack.
- Tip del pro: Usa métodos internos para ver propiedades privadas si las necesitas.