xref: /PHP-8.3/Zend/tests/anon/005.phpt (revision 75a678a7)
1--TEST--
2testing reusing anons that implement an interface
3--FILE--
4<?php
5class Outer {
6    protected $data;
7
8    public function __construct(&$data) {
9        /* array access will be implemented by the time we get to here */
10        $this->data = &$data;
11    }
12
13    public function getArrayAccess() {
14        /* create a child object implementing array access */
15        /* this grants you access to protected methods and members */
16        return new class($this->data) implements ArrayAccess {
17            public function offsetGet($offset): mixed { return $this->data[$offset]; }
18            public function offsetSet($offset, $data): void { $this->data[$offset] = $data; }
19            public function offsetUnset($offset): void { unset($this->data[$offset]); }
20            public function offsetExists($offset): bool { return isset($this->data[$offset]); }
21        };
22    }
23}
24
25$data = array(
26    rand(1, 100),
27    rand(2, 200)
28);
29
30$outer = new Outer($data);
31$proxy = $outer->getArrayAccess();
32
33/* null because no inheritance, so no access to protected member */
34var_dump(@$outer->getArrayAccess()[0]);
35?>
36--EXPECT--
37NULL
38