[VarDumper] Use \ReflectionReference for determining if a key is a reference (php >= 7.4)
This commit is contained in:
parent
376a8f4cab
commit
e99a6b85b8
@ -42,7 +42,7 @@ class VarCloner extends AbstractCloner
|
|||||||
$currentDepth = 0; // Current tree depth
|
$currentDepth = 0; // Current tree depth
|
||||||
$currentDepthFinalIndex = 0; // Final $queue index for current tree depth
|
$currentDepthFinalIndex = 0; // Final $queue index for current tree depth
|
||||||
$minimumDepthReached = 0 === $minDepth; // Becomes true when minimum tree depth has been reached
|
$minimumDepthReached = 0 === $minDepth; // Becomes true when minimum tree depth has been reached
|
||||||
$cookie = (object) []; // Unique object used to detect hard references
|
$cookie = (object) []; // Unique object used to detect hard references
|
||||||
$a = null; // Array cast for nested structures
|
$a = null; // Array cast for nested structures
|
||||||
$stub = null; // Stub capturing the main properties of an original item value
|
$stub = null; // Stub capturing the main properties of an original item value
|
||||||
// or null if the original value is used directly
|
// or null if the original value is used directly
|
||||||
@ -86,8 +86,15 @@ class VarCloner extends AbstractCloner
|
|||||||
}
|
}
|
||||||
foreach ($vals as $k => $v) {
|
foreach ($vals as $k => $v) {
|
||||||
// $v is the original value or a stub object in case of hard references
|
// $v is the original value or a stub object in case of hard references
|
||||||
$refs[$k] = $cookie;
|
|
||||||
if ($zvalIsRef = $vals[$k] === $cookie) {
|
if (\PHP_VERSION_ID >= 70400) {
|
||||||
|
$zvalIsRef = null !== \ReflectionReference::fromArrayElement($vals, $k);
|
||||||
|
} else {
|
||||||
|
$refs[$k] = $cookie;
|
||||||
|
$zvalIsRef = $vals[$k] === $cookie;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($zvalIsRef) {
|
||||||
$vals[$k] = &$stub; // Break hard references to make $queue completely
|
$vals[$k] = &$stub; // Break hard references to make $queue completely
|
||||||
unset($stub); // independent from the original structure
|
unset($stub); // independent from the original structure
|
||||||
if ($v instanceof Stub && isset($hardRefs[spl_object_hash($v)])) {
|
if ($v instanceof Stub && isset($hardRefs[spl_object_hash($v)])) {
|
||||||
|
Reference in New Issue
Block a user