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

    (PHP 5 >= 5.4.0, PHP 7)

    Calculate a unique identifier for the contained objects

    说明

    publicSplObjectStorage::getHash(object $object) : string

    This method calculates an identifier for the objects added to an SplObjectStorage object.

    The implementation in SplObjectStorage returns the same value as spl_object_hash().

    The storage object will never contain more than one object with the same identifier. As such, it can be used to implement a set (a collection of unique values) where the quality of an object being unique is determined by the value returned by this function being unique.

    参数

    $object

    The object whose identifier is to be calculated.

    返回值

    A string with the calculated identifier.

    错误/异常

    A RuntimeException is thrown when the returned value is not a string.

    范例

    SplObjectStorage::getHash() example

    <?php
    class OneSpecimenPerClassStorage extends SplObjectStorage {
        public function getHash($o) {
            return get_class($o);
        }
    }
    class A {}
    $s = new OneSpecimenPerClassStorage;
    $o1 = new stdClass;
    $o2 = new stdClass;
    $o3 = new A;
    $s[$o1] = 1;
    //$o2 is considered equal to $o1 so the value is replaced
    $s[$o2] = 2;
    $s[$o3] = 3;
    //these are considered equal to the objects before
    //so they can be used to access the values stored under them
    $p1 = new stdClass;
    $p2 = new A;
    echo $s[$p1], "\n";
    echo $s[$p2], "\n";
    ?>
    

    以上例程的输出类似于:

    2
    3
    

    参见

    This also appears to be the function which gets used within the contains() function, so if all the objects you are storing already have a unique id you can overwrite this function with your own class.
    <?php
    class UserStorage extends SPLObjectStorage{
       public function getHash($obj){
         return $obj->id;
       }
    }
    $us = new UserStorage();
    $user1 = new User(1);
    $user2 = new User(2);
    $us->attach($user1);
    $us->attach($user2);
    $me = new User(2);
    // the following would normally fail since they are two separate objects 
    // but it works now with our extended getHash()
    $us->contains($me);
    ?>