1--TEST-- 2__clone() can indirectly modify unlocked readonly properties 3--FILE-- 4<?php 5 6class Foo { 7 public function __construct( 8 public readonly array $bar 9 ) {} 10 11 public function __clone() 12 { 13 $this->bar['bar'] = 'bar'; 14 } 15} 16 17$foo = new Foo([]); 18// First call fills the cache slot 19var_dump(clone $foo); 20var_dump(clone $foo); 21 22?> 23--EXPECTF-- 24object(Foo)#2 (%d) { 25 ["bar"]=> 26 array(1) { 27 ["bar"]=> 28 string(3) "bar" 29 } 30} 31object(Foo)#2 (%d) { 32 ["bar"]=> 33 array(1) { 34 ["bar"]=> 35 string(3) "bar" 36 } 37} 38