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 β Returns the data associated with an object
Returns the data associated with an object in the storage.
The data previously associated with the object in the storage.
Throws UnexpectedValueException when object could not be found.
ΠΡΠΈΠΊΠ»Π°Π΄ #1 SplObjectStorage::offsetGet() example
<?php
$s = new SplObjectStorage;
$o1 = new stdClass;
$o2 = new stdClass;
$s[$o1] = "hello";
$s->attach($o2);
var_dump($s->offsetGet($o1)); // Similar to $s[$o1]
var_dump($s->offsetGet($o2)); // Similar to $s[$o2]
?>ΠΠΎΠ΄Π°Π½ΠΈΠΉ Π²ΠΈΡΠ΅ ΠΏΡΠΈΠΊΠ»Π°Π΄ Π²ΠΈΠ²Π΅Π΄Π΅ ΡΠΎΡΡ ΡΡ ΠΎΠΆΠ΅ Π½Π°:
string(5) "hello" 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