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.