SplObjectStorage クラス

はじめに

SplObjectStorage クラスは、オブジェクトをデータに対応させたり、 データを渡さずオブジェクトセットとして使用したりします。 これらはどちらも、オブジェクトを一意に特定したい場合に便利です。

クラス概要

SplObjectStorage
implements Countable Iterator Serializable ArrayAccess
/* メソッド */
public int addAll(SplObjectStorage $storage)
public void attach(object $object, mixed $info = null)
public bool contains(object $object)
public int count(int $mode = COUNT_NORMAL)
public object current()
public void detach(object $object)
public string getHash(object $object)
public mixed getInfo()
public int key()
public void next()
public bool offsetExists(object $object)
public mixed offsetGet(object $object)
public void offsetSet(object $object, mixed $info = null)
public void offsetUnset(object $object)
public int removeAll(SplObjectStorage $storage)
public int removeAllExcept(SplObjectStorage $storage)
public void rewind()
public void seek(int $offset)
public string serialize()
public void setInfo(mixed $info)
public void unserialize(string $data)
public bool valid()

例1 SplObjectStorage をセットとして使用

<?php
// オブジェクトセット
$s = new SplObjectStorage();

$o1 = new stdClass;
$o2 = new stdClass;
$o3 = new stdClass;

$s->attach($o1);
$s->attach($o2);

var_dump($s->contains($o1));
var_dump($s->contains($o2));
var_dump($s->contains($o3));

$s->detach($o2);

var_dump($s->contains($o1));
var_dump($s->contains($o2));
var_dump($s->contains($o3));
?>

上の例の出力は以下となります。

bool(true)
bool(true)
bool(false)
bool(true)
bool(false)
bool(false)

例2 SplObjectStorage をマップとして使用

<?php
// オブジェクトとデータを対応させます
$s = new SplObjectStorage();

$o1 = new stdClass;
$o2 = new stdClass;
$o3 = new stdClass;

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

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

上の例の出力は以下となります。

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

目次