PHP 5.4.35 Released

SplObjectStorage::getHash

(PHP 5 >= 5.4.0)

SplObjectStorage::getHash Calculate a unique identifier for the contained objects

Beschreibung

public string SplObjectStorage::getHash ( object $object )

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.

Parameter-Liste

object

The object whose identifier is to be calculated.

R√ľckgabewerte

A string with the calculated identifier.

Fehler/Exceptions

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

Beispiele

Beispiel #1 SplObjectStorage::getHash() example

<?php
class OneSpecimenPerClassStorage extends SplObjectStorage {
    public function 
getHash($o) {
        return 
get_class($o);
    }
}
class 
{}

$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";
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

2
3

Siehe auch

add a note add a note

User Contributed Notes 1 note

up
2
aron dot duby at gmail dot com
1 year ago
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);

?>
To Top