SplObjectStorage::offsetSet

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

SplObjectStorage::offsetSetAssocie des données à un stockage

Description

public SplObjectStorage::offsetSet(object $object, mixed $info = null): void

Associe des données à un objet du stockage.

Note:

SplObjectStorage::offsetSet() est un alias de SplObjectStorage::attach().

Liste de paramètres

object

L'objet à qui il faut associer les données.

info

Les données à associer avec l'objet.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Exemple avec SplObjectStorage::offsetSet()

<?php
$s
= new SplObjectStorage;

$o1 = new stdClass;

$s->offsetSet($o1, "hello"); // Similaire à $s[$o1] = "hello";

var_dump($s[$o1]);
?>

Résultat de l'exemple ci-dessus est similaire à :

string(5) "hello"

Voir aussi

add a note add a note

User Contributed Notes 1 note

up
1
aderh
1 year ago
Although `offsetSet` is supposed to be an alias to `attach`, real-world results do not indicate that. When extending the SplObjectStorage class, it's expected that a modification to `attach` would also affect `offsetSet`. However, it seems they need to both be extended. Consider the results below...

<?php

declare(strict_types=1);

class
CustomSplObjectStorage extends SplObjectStorage
{
    public function
offsetSet(mixed $object, mixed $info = null): void
   
{
        print(
"offsetSet called\n");
       
parent::offsetSet($object, $info);
    }

    public function
attach(mixed $object, mixed $info = null): void
   
{
        print(
"attach called\n");
       
parent::attach($object, $info);
    }
}

$a = new CustomSplObjectStorage();
$a[new stdClass()] = 'ok';
$a->attach(new stdClass(), 'ok');
?>

This prints:
```
offsetSet called
attach called
```

While we would expect...

```
offsetSet called
attach called
attach called
```

... if `offsetSet` was a true alias of `attach`. I'm not sure if this is intentional or not.
To Top