©
This document uses PHP Chinese website manual Release
(PHP 5 >= 5.3.0)
SplObjectStorage::offsetGet — Returns the data associated with an object
$object
)Returns the data associated with an object in the storage.
object
The object to look for.
The data previously associated with the object in the storage.
Throws UnexpectedValueException when object
could not be found.
Example #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
[#1] kontrollfreak+php at gmail dot com [2015-07-10 13:47:14]
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