Código:
es decir, clear no unsetea todos los elementos, sin embargo pasa por los indices, pero por alguna razon el indice 1, no lo unsetea, sabeis por que?, queda muy sucio volver a preguntar si aun hay elementos a count para volver a ejecutar la misma funcion....<?php class Coleccion extends ArrayIterator { public function clear() { foreach($this as $key => $value) unset($this[$key]); } } $c = new Coleccion(); $c[] = 'valor1'; $c[] = 'valor2'; $c[] = 'valor...'; echo '<pre>', print_r($c), '</pre>'; /* esto imprime: Coleccion Object ( [storage:ArrayIterator:private] => Array ( [0] => valor1 [1] => valor2 [2] => valor... ) ) 1 */ $c->clear(); echo '<pre>', print_r($c), '</pre>'; /* esto imprime: Coleccion Object ( [storage:ArrayIterator:private] => Array ( [1] => valor2 ) ) 1 */ /* * SOLUCION: * en el metodo clear(), contar elemetos, si aun hay, volver a limpiar * public function clear() { foreach($this as $key => $value) unset($this[$key]); if($this->count()) $this->clear(); } */
PD: aclaro que heredo de ArrayIterator y no de ArrayObject, ya que el primero permite iterarse a si mismo, y el segundo segun he comprobado y leido en php.net itera sobre una copia de si mismo, por lo tanto en este caso concreto, en esta funcion clear, no podria modificar los valores o unsetearlos como es el caso... si podeis aclarar esto magnifico
saludos amigos y muchas gracias