lengthuoSPL–SplObjectStorage 方法使用

php手册

描述

The SplObjectStorage class provides a map from objects to data or, by ignoring data, an object set. This dual purpose can be useful in many cases involving the need to uniquely identify objects.

实例

class A
{
    public $i;
    public function __construct ($i)
    {
        $this->i = $i;
    }
}

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


// As a map from objects to data
$s = new SplObjectStorage();

$o1 = new StdClass;
$o2 = new StdClass;
$o3 = new StdClass;

$s[$o1] = "data for object 1";
$s[$o2] = [1, 2, 3];

if (isset($s[$o2])) {
    var_dump($s);
    var_dump($s[$o2]);
}

//输出结果
class SplObjectStorage#1 (1) {
  private $storage =>
  array(2) {
    '000000000e726c4600000000698e987d' =>
    array(2) {
      'obj' =>
      class stdClass#2 (0) {
        ...
      }
      'inf' =>
      string(17) "data for object 1"
    }
    '000000000e726c4700000000698e987d' =>
    array(2) {
      'obj' =>
      class stdClass#3 (0) {
        ...
      }
      'inf' =>
      array(3) {
        ...
      }
    }
  }
}
/Users/shuo/w3c/test/spl/splObjectStorage.php:15:
array(3) {
  [0] =>
  int(1)
  [1] =>
  int(2)
  [2] =>