xref: /PHP-8.2/ext/spl/tests/fixedarray_002.phpt (revision c6357b80)
1--TEST--
2SPL: FixedArray: overloading
3--FILE--
4<?php
5class A extends SplFixedArray {
6    public $prop1 = NULL;
7    public $prop2 = NULL;
8
9    public function count(): int {
10        return 2;
11    }
12
13    public function offsetGet($n): mixed {
14        echo "A::offsetGet\n";
15        return parent::offsetGet($n);
16    }
17    public function offsetSet($n, $v): void {
18        echo "A::offsetSet\n";
19        parent::offsetSet($n, $v);
20    }
21    public function offsetUnset($n): void {
22        echo "A::offsetUnset\n";
23        parent::offsetUnset($n);
24    }
25    public function offsetExists($n): bool {
26        echo "A::offsetExists\n";
27        return parent::offsetExists($n);
28    }
29}
30
31$a = new A;
32
33// errors
34try {
35    $a[0] = "value1";
36} catch (RuntimeException $e) {
37    echo $e::class, ': ', $e->getMessage(), "\n";
38}
39try {
40    var_dump($a["asdf"]);
41} catch (\TypeError $e) {
42    echo $e::class, ': ', $e->getMessage(), "\n";
43}
44try {
45    unset($a[-1]);
46} catch (RuntimeException $e) {
47    echo $e::class, ': ', $e->getMessage(), "\n";
48}
49$a->setSize(10);
50
51
52$a[0] = "value0";
53$a[1] = "value1";
54$a[2] = "value2";
55$a[3] = "value3";
56$ref = "value4";
57$ref2 =&$ref;
58$a[4] = $ref;
59$ref = "value5";
60
61unset($a[1]);
62var_dump(isset($a[1]), isset($a[2]), empty($a[1]), empty($a[2]));
63
64var_dump($a[0], $a[2], $a[3], $a[4]);
65
66// countable
67
68var_dump(count($a), $a->getSize(), count($a) == $a->getSize());
69?>
70--EXPECT--
71A::offsetSet
72RuntimeException: Index invalid or out of range
73A::offsetGet
74TypeError: Illegal offset type
75A::offsetUnset
76RuntimeException: Index invalid or out of range
77A::offsetSet
78A::offsetSet
79A::offsetSet
80A::offsetSet
81A::offsetSet
82A::offsetUnset
83A::offsetExists
84A::offsetExists
85A::offsetExists
86A::offsetExists
87bool(false)
88bool(true)
89bool(true)
90bool(false)
91A::offsetGet
92A::offsetGet
93A::offsetGet
94A::offsetGet
95string(6) "value0"
96string(6) "value2"
97string(6) "value3"
98string(6) "value4"
99int(2)
100int(10)
101bool(false)
102