spl_object_hash () возвращает разные идентификаторы

Я учусь о spl_object_hash() и не совсем понимаю, что стоит за сценой в этом случае:

$obj = new stdClass;
$id1 = spl_object_hash($obj);
$id2 = spl_object_hash(new stdClass);
echo $id1.'<br>'.$id2;

Q1. Зачем $id1 !== $id2?

В ссылке:

Когда объект уничтожается, его хэш может быть повторно использован для других объектов.

Q.2 Есть ли что-то, связанное с этим утверждением? Или я что-то пропустил?

0

Решение

Что значит spl_object_hash делать?

[Возвращает] строку, которая уникальна для каждого существующего в данный момент объекта и всегда одинакова для каждого объекта.

Чтобы прояснить это утверждение: если у вас есть объект A, каждый раз, когда вы хешируете объект A, он будет возвращать одно и то же хеш-значение. Если у вас есть объект A и объект B, даже если оба имеют одинаковый тип и содержат одинаковые значения, их хеши будут отличаться, поскольку они не являются одним и тем же объектом (экземпляром).

Поскольку у вас есть два разных объекта, ожидается, что их соответствующие идентификаторы отличаются.

3

Другие решения

Давайте рассмотрим ваш код шаг за шагом.

(1) $obj = new stdClass;
(2) $id1 = spl_object_hash($obj);
(3) $id2 = spl_object_hash(new stdClass);
(4) echo $id1.'<br>'.$id2;

1: создать новый объект stdClass.

2: Получить хеш для этого объекта.

3: Получить хэш для другого (совершенно другой) объект stdClass.

4: Эхо идентификаторов.

Я считаю, что путаница происходит от третьего шага. Вы создаете новый объект, полностью отличающийся от первого, хотя это тот же тип (класс). И spl_object_hash работает на «уровне объекта», что означает, что он вернет разный хеш для разных объектов.

2

По вопросам рекламы [email protected]