略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: SplObjectStorage::offsetGet

2024-12-23

SplObjectStorage::offsetGet

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

SplObjectStorage::offsetGetReturns the data associated with an object

说明

public SplObjectStorage::offsetGet(object $object): mixed

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.

范例

示例 #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

参见

add a noteadd a note

User Contributed Notes 2 notes

up
2
acgrid
6 years ago
The performance of SplObjectStorage in PHP7.0.7 has boosted a lot.

SplObjectStorage
double(1.3110690116882)
[object_hash => value]
double(2.4147419929504)
up
2
kontrollfreak+php at gmail dot com
6 years ago
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

官方地址:https://www.php.net/manual/en/splobjectstorage.offsetget.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3