# La clase SplObjectStorage

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

## Introducción

La clase SplObjectStorage proporciona una correspondencia de objetos de datos o, ignorando los datos, un conjunto de objetos. Este doble propósito puede ser útil en muchos casos relacionados con la necesidad de identificar objetos de forma única.

## Sinopsis de la Clase

class SplObjectStorage implements Countable, Iterator, Serializable, ArrayAccess {
/* Métodos */
public addAll(SplObjectStorage `$storage`): int
public attach(object `$object`, mixed `$info` = `null`): void
public contains(object `$object`): bool
public count(int `$mode` = `COUNT_NORMAL`): int
public current(): object
public detach(object `$object`): void
public getHash(object `$object`): string
public getInfo(): mixed
public key(): int
public next(): void
public offsetExists(object `$object`): bool
public offsetGet(object `$object`): mixed
public offsetSet(object `$object`, mixed `$info` = `null`): void
public offsetUnset(object `$object`): void
public removeAll(SplObjectStorage `$storage`): int
public removeAllExcept(SplObjectStorage `$storage`): int
public rewind(): void
public serialize(): string
public setInfo(mixed `$info`): void
public unserialize(string `$data`): void
public valid(): bool
}

## Ejemplos

Ejemplo #1 SplObjectStorage como un conjunto

`<?php
// As an object set
$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));
?>`

El resultado del ejemplo sería:

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

Ejemplo #2 SplObjectStorage como un mapa

`<?php
// 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] = array(1,2,3);
if (isset($s[$o2])) {
var_dump($s[$o2]);
}
?>`

El resultado del ejemplo sería:

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

## Tabla de contenidos

- SplObjectStorage::addAll — Agrega todos los objetos de otro almacenamiento
- SplObjectStorage::attach — Agrega un objeto en el almacenamiento
- SplObjectStorage::contains — Comprueba si el almacenamiento contiene un objeto específico
- SplObjectStorage::count — Devuelve el número de objetos en el almacenamiento
- SplObjectStorage::current — Devuelve la entrada actual de almacenamiento
- SplObjectStorage::detach — Quita un object de el almacenamiento
- SplObjectStorage::getHash — Calcular un identificador único (hash) para los objetos contenidos
- SplObjectStorage::getInfo — Devuelve los datos asociados con la entrada del iterador actual
- SplObjectStorage::key — Devuelve el índice en el que se encuentra el iterador actualmente
- SplObjectStorage::next — Mover a la siguiente entrada
- SplObjectStorage::offsetExists — Comprueba si un objeto existe en el almacenamiento
- SplObjectStorage::offsetGet — Devuelve los datos asociados con un object
- SplObjectStorage::offsetSet — Asocia datos a un objeto en el almacenamiento
- SplObjectStorage::offsetUnset — Quita un objeto de el almacenamiento
- SplObjectStorage::removeAll — Remover objetos contenidos en otro almacenamiento de el almacenamiento actual
- SplObjectStorage::removeAllExcept — Remover objetos excepto los contenidos en otro almacenamiento del almacenamiento actual
- SplObjectStorage::rewind — Rebobina el iterador a el primer elemento de el almacenamiento
- SplObjectStorage::serialize — Serializa el almacenamiento
- SplObjectStorage::setInfo — Establece los datos asociados con el iterador de la entrada actual
- SplObjectStorage::unserialize — Deserializa un almacenamiento desde su representación string
- SplObjectStorage::valid — Comprobar si la entrada actual del iterador es válida