Ver Mensaje Individual
  #8 (permalink)  
Antiguo 18/01/2005, 16:05
Herminio Heredia San
 
Fecha de Ingreso: septiembre-2001
Ubicación: Monterrey
Mensajes: 663
Antigüedad: 23 años, 3 meses
Puntos: 6
Si puedes. La ventaja es que en php5 ya tienes iteradores los cuales puedes implementar o extender dependiendo de lo que necesites. Por ejemplo para el caso que estas pidiendo puse la inicializacion de la clase ArrayIterator que ya esta predefinida en php5 como parte de la Standard Php Library ( es recomendable darse una vuelta por ese manual ). Asi que a partir del ejemplo que ya habia puesto en el mensaje anterior podemos hacer algo como lo siguiente (tomalo como ejemplo didactico )
Código PHP:
class Ejemplo{
    
   static private 
$instIterator null;
   private 
$atributo;

   public function 
__construct($var){
       
$this->atributo $var;
       
self::instSingleton();
       
self::$instIterator->append($this);
   }
   
   private function 
instSingleton(){
       if( 
self::$instIterator == null ){
       
self::$instIterator = new ArrayIterator($arreglo = array());
       }
   }
   
   public function 
obtAtributo(){
       return 
$this->atributo;
   }
   
   public function 
obtArrayIterator(){
       return 
self::$instIterator;
   }
}

$x =  new Ejemplo('unica instancia');
$y = new Ejemplo('devuelve la misma instancia');
$it $y->obtArrayIterator();
while(
$it->valid()){
    
$obj $it->current();
    echo 
$obj->obtAtributo()."<br>\n";
    
$it->next();

Como puedes apreciar la clase se instancia y si ya existe un ArrayIterator no vuelve a crear uno nuevo, el unico problema de esta implementacion es el caso en que quieras acceder a una instancia especifica de la clase Ejemplo, ya que tendrias que validar de alguna forma cual es la que quieres acceder para agregar o cambiar el estado del objeto mediante sus atributos. Para esa tarea lo que puedes hacer es una implementacion de la interface Iterator para que maneje arreglos asociativos, ya todo es cuestion de que veas las opciones.