Copy or Share · Level 5 of 8

__clone makes it deep

The same users, but User now has a __clone method.

<?phpclass Address{    public function __construct(public string $city) {}}class User{    public function __construct(public string $name, public Address $address) {}     public function __clone(): void    {        $this->address = clone $this->address;    }}$u1 = new User('Ann', new Address('Oslo'));$u2 = clone $u1;$u2->address->city = 'Rome';echo $u1->name, ' ', $u1->address->city, PHP_EOL;echo $u2->name, ' ', $u2->address->city, PHP_EOL;

1. Predict the output

Tap the lines in the order you think they print.

  1. 1…
  2. 2…