SplObjectStorage::getHash

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

SplObjectStorage::getHashCalcule un identifiant unique pour les objets contenus

Description

public SplObjectStorage::getHash(object $object): string

Cette méthode calcule un identifiant pour les objets ajoutés dans l'objet SplObjectStorage.

L'implémentation dans SplObjectStorage retourne la même valeur que spl_object_hash().

Cet objet de stockage ne doit pas contenir plus d'un objet avec le même identifiant. Aussi, il peut être utilisé pour implémenter un jeu (une collection de valeurs uniques) où la qualité d'un objet unique est déterminé par la valeur retournée par cette fonction.

Liste de paramètres

object

L'objet dont nous devons calculer l'identifiant.

Valeurs de retour

Une chaîne de caractères représentant l'identifiant calculé.

Erreurs / Exceptions

Une exception RuntimeException est émise lorsque la valeur retournée n'est pas une chaîne de caractères.

Exemples

Exemple #1 Exemple avec SplObjectStorage::getHash()

<?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 est considéré comme égal à $o1, et donc, la valeur est remplacée
$s[$o2] = 2;
$s[$o3] = 3;

//ceci est considéré comme égal aux objets précédents
// aussi, ils peuvent être utilisés pour accéder aux valeurs y étant stockées
$p1 = new stdClass;
$p2 = new A;
echo
$s[$p1], "\n";
echo
$s[$p2], "\n";
?>

Résultat de l'exemple ci-dessus est similaire à :

2
3

Voir aussi

add a note

User Contributed Notes 1 note

up
7
aron dot duby at gmail dot com
11 years 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