• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • SplObjectStorage::offsetGet()

    (PHP 5 >= 5.3.0, PHP 7)

    Returns the data associated with an object

    说明

    publicSplObjectStorage::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.

    范例

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