# SplObjectStorage クラス

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

## はじめに

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

## クラス概要

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

## 例

例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)
    }

## 変更履歴

バージョン | 説明
--- | ---
8.4.0 | SeekableIterator を実装しました。 これより前のバージョンでは、Iterator を実装していました。

## 目次

- SplObjectStorage::addAll — 別のストレージからすべてのオブジェクトを追加する
- SplObjectStorage::attach — オブジェクトをストレージに追加する
- SplObjectStorage::contains — ストレージに特定のオブジェクトが含まれるかどうかを調べる
- SplObjectStorage::count — ストレージ内のオブジェクトの数を返す
- SplObjectStorage::current — 現在のストレージの要素を返す
- SplObjectStorage::detach — objectをストレージから取り除く
- SplObjectStorage::getHash — 中に含むオブジェクトの一意な識別子を算出する
- SplObjectStorage::getInfo — イテレータの現在のエントリに関連づけられたデータを返す
- SplObjectStorage::key — イテレータの現在位置を返す
- SplObjectStorage::next — 次のエントリに移動する
- SplObjectStorage::offsetExists — オブジェクトがストレージ内に存在するかどうかを調べる
- SplObjectStorage::offsetGet — オブジェクトに関連づけられたデータを返す
- SplObjectStorage::offsetSet — ストレージ内のオブジェクトにデータを関連づける
- SplObjectStorage::offsetUnset — ストレージからオブジェクトを取り除く
- SplObjectStorage::removeAll — 別のストレージに含まれているオブジェクトを現在のストレージから取り除く
- SplObjectStorage::removeAllExcept — 別のストレージに含まれているもの以外のすべてのオブジェクトを現在のストレージから取り除く
- SplObjectStorage::rewind — イテレータをストレージの最初の要素に巻き戻す
- SplObjectStorage::seek — 位置を移動する
- SplObjectStorage::serialize — ストレージをシリアライズする
- SplObjectStorage::setInfo — イテレータの現在のエントリに関連づけるデータを設定する
- SplObjectStorage::unserialize — ストレージの文字列表現をアンシリアライズする
- SplObjectStorage::valid — イテレータの現在のエントリが有効かどうかを返す

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open