Iteración de objetos

Una de las características del nuevo motor orientado a objetos es que ahora podemos utilizar un bucle foreach() para iterar por los atributos de un objeto como si se tratara de un array. Por defecto, sólo los atributos públicos pueden ser utilizados para una iteración normal.

Veamos un ejemplo de cómo podemos recorrer los atributos de una objeto como si fuera un array:

<?php
   class EjemploIteracionAtributos {
      public $var1 = 'Valor 1';
      public $var2 = 'Valor 2';
      public $var3 = 'Valor 3';
      protected $protegida = 'Valor protegido';
      private $privada = 'Valor privado';
   }
   $obj = new EjemploIteracionAtributos();
   // Solo muestra los pares identidicador valor de los
   // atributos públicos.
   foreach($obj as $idAtributo => $valor)
      echo "$idAtributo => $valor<br>";
?>

RESULTADO

var1 => Valor 1
var2 => Valor 2
var3 => Valor 3

Como vemos en el resultado de la ejecución del ejemplo, no se pueden iterar valores no públicos, podríamos implementar un método de la clase que realice la iteración de los atributos. Lo vemos en siguiente ejemplo:

<?php
   class EjemploIteracionAtributos {
      public $var1 = 'Valor 1';
      public $var2 = 'Valor 2';
      public $var3 = 'Valor 3';
      protected $protegida = 'Valor protegido';
      private $privada = 'Valor privado';

      function IterarAtributos() {
         // Muestra todos los pares identidicador valor.
         echo 'EjemploIteracionAtributos::IterarAtributos:<br>';
         foreach($this as $idAtributo => $valor)
            echo "$idAtributo => $valor<br>";
         }
   }
   $obj = new EjemploIteracionAtributos();
   // Solo muestra los pares identificador valor de los atributos publicos.
   foreach($obj as $idAtributo => $valor)
      echo "$idAtributo => $valor<br>";
   echo "<hr>>";
   $obj->IterarAtributos();
?>

RESULTADO

var1 => Valor 1
var2 => Valor 2
var3 => Valor 3
________________________________________
EjemploIteracionAtributos::IterarAtributos:
var1 => Valor 1
var2 => Valor 2
var3 => Valor 3
protegida => Valor protegido
privada => Valor privado

results matching ""

    No results matching ""