1--TEST-- 2Self-referencing map entry GC - 003 3--FILE-- 4<?php 5 6class Value { 7 public function __construct(public readonly string $value) { 8 } 9} 10 11$map = new WeakMap(); 12$obj = new Value('a'); 13$map[$obj] = [$obj, $map]; 14$ref = WeakReference::create($map); 15 16gc_collect_cycles(); 17 18var_dump($ref->get()); 19 20gc_collect_cycles(); 21 22// $obj is first in the root buffer 23$obj = null; 24$map = null; 25gc_collect_cycles(); 26 27var_dump($ref->get()); 28 29--EXPECTF-- 30object(WeakMap)#%d (1) { 31 [0]=> 32 array(2) { 33 ["key"]=> 34 object(Value)#%d (1) { 35 ["value"]=> 36 string(1) "a" 37 } 38 ["value"]=> 39 array(2) { 40 [0]=> 41 object(Value)#%d (1) { 42 ["value"]=> 43 string(1) "a" 44 } 45 [1]=> 46 *RECURSION* 47 } 48 } 49} 50NULL 51