Ver Mensaje Individual
  #29 (permalink)  
Antiguo 12/01/2005, 10:31
Avatar de Calisco
Calisco
 
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 10 meses
Puntos: 4
Iteracion de Objetos

Iteracion de Objetos

PHP 5 provee una manera para objetos para ser definidos de manera que es posible iterar a traves de una lista de items con, por ejemplo, una declaracion foreach. Por defecto, las propiedades visibles seran usadas por esta iteracion.PHP 5 provides a way for objects to be defined so it is possible to iterate through a list of items, with, for example a foreach statement. By default, all visible properties will be used for the iteration.Lo acomode como pude. Aca necesito una mano.

Ejemplo 19-20. Simple Iteracion de Object


Código PHP:
<?php
class MiClase
{
   public 
$var1 'valor 1';
   public 
$var2 'valor 2';
   public 
$var3 'valor 3';

   protected 
$protegida 'variable protegida';
   private  
$privada  'variable privada';

   function 
iteracionVisible() {
       echo 
"MiClase::iteracionVisible:\n";
       foreach(
$this as $key => $value) {
           print 
"$key => $value\n";
       }
   }
}

$clase = new MiClase();

foreach(
$clase as $key => $value) {
   print 
"$key => $value\n";
}
echo 
"\n";


$clase->iteracionVisible();

?>
El ejemplo anterior tendra la siguiente salida:
Cita:
var1 => valor 1
var2 => valor 2
var3 => valor 3

MiClase::iteracionVisible:
var1 => valor 1
var2 => valor 2
var3 => valor 3
protected => variable protegida
private => variable privada
Como muestra la salida de este script, a travez del foreach se han interado todas las variables visibles que pueden ser accedidas. Para realizar un paso mas avanzado, se puede implementar una funcion internar de PHP denominada interface de Iterador. Esta funcion permite al objeto decidir que y como el objeto sera iterado.
As the output shows, the foreach iterated through all visible variables that can be accessed. To take it a step further you can implement one of PHP 5's internal interface named Iterator. This allows the object to decide what and how the object will be iterated.


Ejemplo 19-21. Iteracion de Objeto implementando Iterador
Código PHP:
<?php

class MiIterador implements Iterator
{
   private 
$var = array();

   public function 
__construct($array)
   {
       if (
is_array($array)) {
           
$this->var $array;
       }
   }

   public function 
rewind() {
       echo 
"rewinding\n";
       
reset($this->var);
   }

   public function 
current() {
       
$var current($this->var);
       echo 
"current: $var\n";
       return 
$var;
   }

   public function 
key() {
       
$var key($this->var);
       echo 
"key: $var\n";
       return 
$var;
   }

   public function 
next() {
       
$var next($this->var);
       echo 
"next: $var\n";
       return 
$var;
   }

   public function 
valid() {
       
$var $this->current() !== false;
       echo 
"valid: {$var}\n";
       return 
$var;
   }
}

$values = array(1,2,3);
$it = new MyIterator($values);

foreach (
$it as $a => $b) {
   print 
"$a: $b\n";
}
?>
La salida será:
Cita:
rewinding
current: 1
valid: 1
current: 1
key: 0
0: 1
next: 2
current: 2
valid: 1
current: 2
key: 1
1: 2
next: 3
current: 3
valid: 1
current: 3
key: 2
2: 3
next:
current:
valid:
Tambien se puede definir la clase ...
You can also define your class so that it doesn't have to define all the Iterator functions by simply implementing the PHP 5 IteratorAggregate interface.
__________________
| Cabeza De Raton |

Última edición por Calisco; 14/01/2005 a las 12:12