Я учусь о 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 Есть ли что-то, связанное с этим утверждением? Или я что-то пропустил?
Что значит spl_object_hash
делать?
[Возвращает] строку, которая уникальна для каждого существующего в данный момент объекта и всегда одинакова для каждого объекта.
Чтобы прояснить это утверждение: если у вас есть объект A, каждый раз, когда вы хешируете объект A, он будет возвращать одно и то же хеш-значение. Если у вас есть объект A и объект B, даже если оба имеют одинаковый тип и содержат одинаковые значения, их хеши будут отличаться, поскольку они не являются одним и тем же объектом (экземпляром).
Поскольку у вас есть два разных объекта, ожидается, что их соответствующие идентификаторы отличаются.
Давайте рассмотрим ваш код шаг за шагом.
(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 работает на «уровне объекта», что означает, что он вернет разный хеш для разных объектов.