3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Email { public function __construct( public string $value ) {} } class Message { public function __construct( private Email $recipient ) {} public function recipient(): Email { return $this->recipient; } } $address = new Email('foo@bar.com'); $message = new Message($address); var_dump($message); $message->recipient()->value = 'oops'; var_dump($message);
Output for 8.2.29, 8.3.5 - 8.3.25, 8.4.9 - 8.4.12
object(Message)#2 (1) { ["recipient":"Message":private]=> object(Email)#1 (1) { ["value"]=> string(11) "foo@bar.com" } } object(Message)#2 (1) { ["recipient":"Message":private]=> object(Email)#1 (1) { ["value"]=> string(4) "oops" } }

preferences:
44.16 ms | 407 KiB | 5 Q