The performance of SplObjectStorage in PHP7.0.7 has boosted a lot.
SplObjectStorage
double(1.3110690116882)
[object_hash => value]
double(2.4147419929504)
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
SplObjectStorage::offsetGet — Devuelve los datos asociados con un object
Devuelve los datos asociados con un object en el almacenamiento.
Los datos previamente asociados con el object en el almacenamiento.
Lanza una excepción de tipo UnexpectedValueException cuando no se pudo encontrar object
.
Ejemplo #1 Ejemplo de SplObjectStorage::offsetGet()
<?php
$s = new SplObjectStorage;
$o1 = new stdClass;
$o2 = new stdClass;
$s[$o1] = "hola";
$s->attach($o2);
var_dump($s->offsetGet($o1)); // Similar a $s[$o1]
var_dump($s->offsetGet($o2)); // Similar a $s[$o2]
?>
El resultado del ejemplo sería algo similar a:
string(4) "hola" NULL
The performance of SplObjectStorage in PHP7.0.7 has boosted a lot.
SplObjectStorage
double(1.3110690116882)
[object_hash => value]
double(2.4147419929504)
SplObjectStorage::offsetGet() can become EXTREMELY slow depending on the associated data (PHP 5.6).
<?php
// SplObjectStorage
$object = new stdClass;
$test = new SplObjectStorage;
$test->attach($object, str_repeat("\0", 1024*1024));
$start = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
$test->offsetGet($object);
}
var_dump(microtime(true) - $start); // 76 seconds!
// Array + spl_object_hash()
$object = new stdClass;
$test = [];
$test[spl_object_hash($object)] = str_repeat("\0", 1024*1024);
$start = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
$temp = $test[spl_object_hash($object)];
}
var_dump(microtime(true) - $start); // 0.3 seconds