文字

SplObjectStorage::offsetGet

(PHP 5 >= 5.3.0)

SplObjectStorage::offsetGetReturns the data associated with an object

说明

public mixed SplObjectStorage::offsetGet ( 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

参见

  • SplObjectStorage::offsetSet() - Associates data to an object in the storage
  • SplObjectStorage::offsetExists() - Checks whether an object exists in the storage
  • SplObjectStorage::offsetUnset() - Removes an object from the storage

用户评论:

[#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

上一篇: 下一篇: