fix(hal): use spl_object_id() for circular reference counters

spl_object_hash() is deprecated in PHP 8.6, and the HAL ItemNormalizer
calls it in isHalCircularReference() on every item it normalizes. The
hash is only used as a key for the circular reference counters, so
spl_object_id() is a drop-in replacement (same change as
doctrine/dbal#7518).
This commit is contained in:
dualfroz committed 2026-10-08 11:39:06 +02:00
1 parent 28b90c7e34
commit 167625fa31
1 file changed
+6 -6
+6 -6
View File
@@ -370,19 +370,19 @@ final class ItemNormalizer extends AbstractItemNormalizer
*/ */
protected function isHalCircularReference(object $object, array &$context): bool protected function isHalCircularReference(object $object, array &$context): bool
{ {
$objectHash = spl_object_hash($object); $objectId = spl_object_id($object);
$circularReferenceLimit = $context[AbstractNormalizer::CIRCULAR_REFERENCE_LIMIT] ?? $this->defaultContext[AbstractNormalizer::CIRCULAR_REFERENCE_LIMIT]; $circularReferenceLimit = $context[AbstractNormalizer::CIRCULAR_REFERENCE_LIMIT] ?? $this->defaultContext[AbstractNormalizer::CIRCULAR_REFERENCE_LIMIT];
if (isset($context[self::HAL_CIRCULAR_REFERENCE_LIMIT_COUNTERS][$objectHash])) { if (isset($context[self::HAL_CIRCULAR_REFERENCE_LIMIT_COUNTERS][$objectId])) {
if ($context[self::HAL_CIRCULAR_REFERENCE_LIMIT_COUNTERS][$objectHash] >= $circularReferenceLimit) { if ($context[self::HAL_CIRCULAR_REFERENCE_LIMIT_COUNTERS][$objectId] >= $circularReferenceLimit) {
unset($context[self::HAL_CIRCULAR_REFERENCE_LIMIT_COUNTERS][$objectHash]); unset($context[self::HAL_CIRCULAR_REFERENCE_LIMIT_COUNTERS][$objectId]);
return true; return true;
} }
++$context[self::HAL_CIRCULAR_REFERENCE_LIMIT_COUNTERS][$objectHash]; ++$context[self::HAL_CIRCULAR_REFERENCE_LIMIT_COUNTERS][$objectId];
} else { } else {
$context[self::HAL_CIRCULAR_REFERENCE_LIMIT_COUNTERS][$objectHash] = 1; $context[self::HAL_CIRCULAR_REFERENCE_LIMIT_COUNTERS][$objectId] = 1;
} }
return false; return false;