CakeFest 2024: The Official CakePHP Conference

SplObjectStorage::getHash

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

SplObjectStorage::getHash Calcula um identificador único para os objetos contidos

Descrição

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

Este método calcula um identificador para os objetos adicionados a um objeto SplObjectStorage.

A implementação em SplObjectStorage retorna o mesmo valor que spl_object_hash().

O objeto de armazenamento nunca conterá mais de um objeto com o mesmo identificador. Portanto, pode ser usado para implementar um conjunto (um armazenamento de valores únicos) onde a qualidade de um objeto ser único é determinada pelo fato do valor retornado por esta função ser único.

Parâmetros

object

O objeto cujo identificador será calculado.

Valor Retornado

Uma string com o identificador calculado.

Erros/Exceções

Uma RuntimeException é lançada quando o valor retornado não é uma string.

Exemplos

Exemplo #1 Exemplo de 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 é considerado igual a $o1, então o valor é substituído
$s[$o2] = 2;
$s[$o3] = 3;

// esses são considerados iguais aos objetos anteriores
// então eles podem ser usados para acessar os valores armazenados sob eles
$p1 = new stdClass;
$p2 = new A;
echo
$s[$p1], "\n";
echo
$s[$p2], "\n";
?>

O exemplo acima produzirá algo semelhante a:

2
3

Veja Também

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