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
?>
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 Iterator, Countable
{
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;
}
}
}
}
}
?>
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();
?>
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.