Ejemplo practico de la Interface Iterator de SPL
Extendiendo el post anterior sobre SPL (Standar PHP Library), aquí voy a mostrar un ejemplo "mejor" (es relativo) del que se muestra en el libro de la certificación. En el post anterior comentaba que el ejemplo del libro si bien es bueno y cumple con su cometido creía que alguien con no mucha experiencia no vería todo el potencial de esto.
Como siempre, yo no soy un experto en esto y puede que este equivocado, si lo estoy sentite libre de corregirme que con gusto modifico el ejemplo y hago publica tu corrección.
El ejemplo que voy a mostrar se basa en una posible implementación de unos cursos (de lo que quieras) a cada curso se le agregan los alumnos correspondientes. En este ejemplo se utiliza la interfaz Iterator para poder iterar sobre el objeto curso para imprimir los nombre de los alumnos.
<?php
class Persona{
}
class Alumno extends Persona{
private $nombre = '';
private $apellido = '';
public function __construct($nombre, $apellido = false){
$this->nombre = $nombre;
$this->apellido = $apellido;
}
public function __toString(){
return $this->nombre . ( $this->apellido != false ? ' '.$this->apellido : '');
}
}
class Curso implements Iterator{
private $alumnos = array();
private $_current = 0;
public function agregarAlumno(Alumno $alumno){
$this->alumnos[] = $alumno;
}
public function quitarAlumno(Alumno $alumno){
if(in_array($alumno, $this->alumnos))
unset($this->alumnos[array_search($alumno,$this->alumnos)]);
}
public function current(){
return (string) $this->alumnos[$this->_current];
}
public function next(){
$this->_current += 1;
}
public function rewind(){
$this->_current = 0;
}
public function key(){
return $this->_current;
}
public function valid(){
return isset($this->alumnos[$this->_current]);
}
}
$data = new Curso();
$data->agregarAlumno(new Alumno('dario', 'ocles'));
$data->agregarAlumno(new Alumno('pablo', 'lecuona'));
$data->agregarAlumno(new Alumno('nestor', 'Garcia'));
foreach($data as $key => $value){
echo "$key: $value<br>";
}
?>
Lo bueno de esta tipo de implementación que cuando necesites recuperar otro dato de los alumnos en lugar del nombre simplemente se cambia el método correspondiente y se acabo el problema.
Dario Ocles.


0 comentarios:
Publicar un comentario en la entrada