Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Array de objetos (clase SplObjectStorage o mi clase)

Estas en el tema de Array de objetos (clase SplObjectStorage o mi clase) en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Mi problema es el que se ve en el siguiente codigo: Código PHP: <? class  a { } $lista  = new  SplObjectStorage (); $a = new  a ...
  #1 (permalink)  
Antiguo 15/04/2010, 15:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 58
Antigüedad: 17 años, 2 meses
Puntos: 1
Array de objetos (clase SplObjectStorage o mi clase)

Mi problema es el que se ve en el siguiente codigo:

Código PHP:
<?
class a
{
}

$lista = new SplObjectStorage();
$a= new a();
$lista->attach($a);
$a= new a();
$lista->attach($a);
$a= new a();
$lista->attach($a);
$a= new a();
$lista->attach($a);

echo 
"antes"$lista->count(); //          imprime 4

echo $lista->count();
foreach (
$lista as $a)
{
$lista->detach($a);
}
echo 
"despues"$lista->count();   //          imprime 1
?>
Buscando en internet y en el foro, lo unico que encontre es esto: (Pero sin solucion)
http://www.forosdelweb.com/f68/splob...detach-609316/



entonces como no encontre solucion de ningun tipo, me puse hacer mi propia clase con la implementacion de la clase SplObjectStorage.

Y lo que hice fue lo siguiente:

Código PHP:
<?
class MiArray implements IteratorCountable 
{
    private 
$storage = array();
    private 
$index 0;
 
     function 
rewind()
     {
         
rewind($this->storage);
     }
     
     function 
valid()
     {
         return 
key($this->storage) !== false;
     }
     
     function 
key()
     {
         return 
$this->index;
     }
     
     function 
current()
     {
         return 
current($this->storage);
     }
     
     function 
next()
     {
         
next($this->storage);
         
$this->index++;
     }
 
     function 
count()
     {
         return 
count($this->storage);
     }
 
     function 
contains($obj)
     {
         if (
is_object($obj))
         {
             foreach(
$this->storage as $object)
             {
                 if (
$object === $obj)
                 {
                     return 
true;
                 }
             }
         }
         return 
false;
     }
 
     function 
attach($obj)
     {
         if (
is_object($obj) && !$this->contains($obj))
         {
             
$this->storage[] = $obj;
         }
     }
 
     function 
detach($obj)
     {
         if (
is_object($obj))
         {
             foreach(
$this->storage as $object)
            {
                 if (
$object === $obj)
                 {
                     unset(
$this->storage[$obj]);
                     
rewind($this->storage);
                    return;
                 }
             }
         }
     }
}
?>
y donde la utilizo:

Código PHP:
<?php
    
require("Clases/class.Usuario.php");
    require(
"Clases/class.Cliente.php");
    require(
"Clases/class.MiArray.php");
    
    
    
$_SESSION['Clientes'] = new MiArray();
    
    
$miCliente = new Cliente();
    
$miCliente->setNombre('Juan');
    
$miCliente->setApellido('Perez');
    
$miCliente->setTelefono('xxx-xxxxx');
    
    
$miCliente1 = new Cliente();
    
$miCliente1->setNombre('Roberto');
    
$miCliente1->setApellido('Bolaños');
    
$miCliente1->setTelefono('xxxx-xxxx');
    
    
$_SESSION['Clientes']->attach($miCliente);
    
$_SESSION['Clientes']->attach($miCliente1);
    
    
    foreach(
$_SESSION['Clientes'] as $cliente){
        
$cliente->getNombre();
    }
    
    echo 
"CANTIDAD: "$_SESSION['Clientes']->count();
    
    
$_SESSION['Clientes']->detach($miCliente);    
    
    echo 
"CANTIDAD: "$_SESSION['Clientes']->count();
    
    
$_SESSION['Clientes']->detach($miCliente1);
    
    echo 
"CANTIDAD: "$_SESSION['Clientes']->count();
?>
y el error

Warning: rewind() expects parameter 1 to be resource, array given in C:\xampp\htdocs\Romera\Clases\class.MiArray.php on line 9

Fatal error: Call to a member function getNombre() on a non-object in C:\xampp\htdocs\Romera\TestClienteEnArray.php on line 24

Ya no se me ocurre mas nada... si alguien me puede dar una mano, para salocionar lo de SplObjectStorage o mi propio codigo estare muy agradecido!!!


Saludos.


Nico8287.

Etiquetas: clase, objetos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:03.