SplObjectStorage::getHash
(PHP 5 >= 5.4.0)
SplObjectStorage::getHash — Вычисляет уникальный идентификатор для объектов контейнера
Описание
$object
)Этот метод вычисляет уникальный идентификатор для объектов добавляемых в контейнер SplObjectStorage.
Реализация SplObjectStorage возвращает то же значение, что и функция spl_object_hash().
В одном контейнере никогда не появится двух объектов с одинаковыми идентификаторами. Таким образом, с помощью контейнера можно реализовать множество (коллекцию значений, каждое из которых представлено в единственном экземпляре), в котором уникальность объектов будет определяться этим идентификатором.
Список параметров
-
object
-
Объект, чей идентификатор требуется вычислить.
Возвращаемые значения
Строка string с результатом вычисления.
Ошибки
Метод выбрасывает исключение RuntimeException, когда тип возвращаемого значения отличен от типа string.
Примеры
Пример #1 Пример использования 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 предполагается равным $o1, соответственно значение замещается
$s[$o2] = 2;
$s[$o3] = 3;
//предполагаем, что следующие объекты эквивалентны приведенным выше
//таким образом их можно использовать для извлечения данных из контейнера
$p1 = new stdClass;
$p2 = new A;
echo $s[$p1], "\n";
echo $s[$p2], "\n";
?>
Результатом выполнения данного примера будет что-то подобное:
2 3
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие базовые расширения
- Стандартная библиотека PHP (SPL)
- Структуры данных
- Функция SplObjectStorage::addAll() - Добавляет все объекты из другого контейнера
- Функция SplObjectStorage::attach() - Добавляет объект в контейнер
- Функция SplObjectStorage::contains() - Проверяет, содержит ли контейнер заданный объект
- Функция SplObjectStorage::count() - Возвращает количество объектов в контейнере
- Функция SplObjectStorage::current() - Возвращает текущий объект
- Функция SplObjectStorage::detach() - Удаляет объект object из контейнера
- Функция SplObjectStorage::getHash() - Вычисляет уникальный идентификатор для объектов контейнера
- Функция SplObjectStorage::getInfo() - Возвращает данные ассоциированные с текущим объектом
- Функция SplObjectStorage::key() - Возвращает индекс текущего положения итератора
- Функция SplObjectStorage::next() - Переход к следующему объекту
- Функция SplObjectStorage::offsetExists() - Проверяет, существует ли объект в контейнере
- Функция SplObjectStorage::offsetGet() - Возвращает данные ассоциированные с объектом object
- Функция SplObjectStorage::offsetSet() - Ассоциирует данные с объектом в контейнере
- Функция SplObjectStorage::offsetUnset() - Удаляет объект из контейнера
- Функция SplObjectStorage::removeAll() - Удаляет из текущего контейнера объекты, которые есть в другом контейнере
- Функция SplObjectStorage::removeAllExcept() - Удаляет из текущего контейнера все объекты, которых нет в другом контейнере
- Функция SplObjectStorage::rewind() - Переводит итератор на первый элемент контейнера
- Функция SplObjectStorage::serialize() - Сериализует контейнер
- Функция SplObjectStorage::setInfo() - Ассоциирует данные с текущим объектом контейнера
- Функция SplObjectStorage::unserialize() - Восстанавливает сериализованый контейнер из строки
- Функция SplObjectStorage::valid() - Определяет, допустимо ли текущее значение итератора
Коментарии
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);
?>