3v4l.org

run code in 300+ PHP versions simultaneously
<?php Class Foo { private $id; public function __construct() { $this->id = uniqid('', false); } public function setId($id) { $this->id = $id; } } $foo1 = new Foo(); $foo2 = new Foo(); $a = new ArrayObject([$foo1, $foo2]); $b = new ArrayObject(); foreach ($a as $i => $foo) { $b->offsetSet($i, $foo); } echo 'Initial state of Copy:' . PHP_EOL;; var_export($b); echo PHP_EOL . '-----------------------' . PHP_EOL; //form submission $foo1->setId('Hello World'); echo 'Form Submitted ID Changed in Copy:' . PHP_EOL;; var_export($b); echo PHP_EOL . '-----------------------' . PHP_EOL; echo 'Source has foo2 entity removed:' . PHP_EOL;; $a->offsetUnset(1); //remove entity var_export($a); echo PHP_EOL . '-----------------------' . PHP_EOL; echo 'Copy still contains both entities:' . PHP_EOL;; var_export($b);
Output for 7.4.25
Initial state of Copy: ArrayObject::__set_state(array( 0 => Foo::__set_state(array( 'id' => '6182cb8d009c7', )), 1 => Foo::__set_state(array( 'id' => '6182cb8d009ce', )), )) ----------------------- Form Submitted ID Changed in Copy: ArrayObject::__set_state(array( 0 => Foo::__set_state(array( 'id' => 'Hello World', )), 1 => Foo::__set_state(array( 'id' => '6182cb8d009ce', )), )) ----------------------- Source has foo2 entity removed: ArrayObject::__set_state(array( 0 => Foo::__set_state(array( 'id' => 'Hello World', )), )) ----------------------- Copy still contains both entities: ArrayObject::__set_state(array( 0 => Foo::__set_state(array( 'id' => 'Hello World', )), 1 => Foo::__set_state(array( 'id' => '6182cb8d009ce', )), ))

preferences:
64.59 ms | 407 KiB | 5 Q