1--TEST--
2ZE2 ArrayAccess and ASSIGN_OP operators (.=)
3--FILE--
4<?php
5
6class Peoples implements ArrayAccess {
7    public $person;
8
9    function __construct() {
10        $this->person = array(array('name'=>'Foo'));
11    }
12
13    function offsetExists($index): bool {
14        return array_key_exists($this->person, $index);
15    }
16
17    function offsetGet($index): mixed {
18        return $this->person[$index];
19    }
20
21    function offsetSet($index, $value): void {
22        $this->person[$index] = $value;
23    }
24
25    function offsetUnset($index): void {
26        unset($this->person[$index]);
27    }
28}
29
30$people = new Peoples;
31
32var_dump($people->person[0]['name']);
33$people->person[0]['name'] = $people->person[0]['name'] . 'Bar';
34var_dump($people->person[0]['name']);
35$people->person[0]['name'] .= 'Baz';
36var_dump($people->person[0]['name']);
37
38echo "===ArrayOverloading===\n";
39
40$people = new Peoples;
41
42var_dump($people[0]['name']);
43$people[0]['name'] = 'FooBar';
44var_dump($people[0]['name']);
45$people[0]['name'] = $people->person[0]['name'] . 'Bar';
46var_dump($people[0]['name']);
47$people[0]['name'] .= 'Baz';
48var_dump($people[0]['name']);
49
50?>
51--EXPECTF--
52string(3) "Foo"
53string(6) "FooBar"
54string(9) "FooBarBaz"
55===ArrayOverloading===
56string(3) "Foo"
57
58Notice: Indirect modification of overloaded element of Peoples has no effect in %sarray_access_008.php on line 40
59string(3) "Foo"
60
61Notice: Indirect modification of overloaded element of Peoples has no effect in %sarray_access_008.php on line 42
62string(3) "Foo"
63
64Notice: Indirect modification of overloaded element of Peoples has no effect in %sarray_access_008.php on line 44
65string(3) "Foo"
66