PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候。
PHP SPL SplObjectStorage类实现了Countable,Iterator,Serializable,ArrayAccess四个接口。可实现统计、迭代、序列化、数组式访问等功能。

类摘要

SplObjectStorage implements Countable , Iterator , Serializable , ArrayAccess {    /* 方法 */    public void addAll ( SplObjectStorage $storage )    // ↓↓加入对象    public void attach ( object $object [, mixed $data = NULL ] )    // ↓↓检查是否包含指定对象    public bool contains ( object $object )    // ↓↓移除对象    public void detach ( object $object )    // ↓↓返回一串哈希值,每次调用的时候该串哈希值都在改变    public string getHash ( object $object )    public mixed getInfo ( void )    public int count ( void )    public object current ( void )    public int key ( void )    public void next ( void )    public bool offsetExists ( object $object )    public mixed offsetGet ( object $object )    public void offsetSet ( object $object [, mixed $data = NULL ] )    public void offsetUnset ( object $object )    public void removeAll ( SplObjectStorage $storage )    public void removeAllExcept ( SplObjectStorage $storage )    public void rewind ( void )    public string serialize ( void )    public void setInfo ( mixed $data )    public void unserialize ( string $serialized )    public bool valid ( void )}

Example

# Example1:class A {  public $i;  public function __construct($i) {    $this->i = $i;  }}$a1 = new A(1);$a2 = new A(2);$a3 = new A(3);$a4 = new A(4);$container = new SplObjectStorage();//SplObjectStorage::attach 添加对象到Storage中$container->attach($a1);$container->attach($a2);$container->attach($a3);//SplObjectStorage::detach 将对象从Storage中移除$container->detach($a2);//SplObjectStorage::contains用于检查对象是否存在Storage中var_dump($container->contains($a1)); //truevar_dump($container->contains($a4)); //false//遍历$container->rewind();while($container->valid()) {  var_dump($container->current());  var_dump($container->getInfo());  $container->next();}

参考

http://php.net/manual/zh/clas...