Skip to content

Commit 0efea86

Browse files
committed
Add test demonstrating internal objects need to opt-in to supporting ArrayAccess for userland
1 parent a0fc98b commit 0efea86

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
--TEST--
2+
Internal handlers that do not explicitly support userland ArrayAccess
3+
--EXTENSIONS--
4+
zend_test
5+
--FILE--
6+
<?php
7+
8+
class NoImplement extends DimensionHandlersNoArrayAccess {}
9+
10+
class DoImplement extends DimensionHandlersNoArrayAccess implements ArrayAccess {
11+
public function offsetSet($offset, $value): void {
12+
var_dump(__METHOD__);
13+
var_dump($offset);
14+
var_dump($value);
15+
}
16+
public function offsetGet($offset): mixed {
17+
var_dump(__METHOD__);
18+
var_dump($offset);
19+
return "dummy";
20+
}
21+
public function offsetUnset($offset): void {
22+
var_dump(__METHOD__);
23+
var_dump($offset);
24+
}
25+
public function offsetExists($offset): bool {
26+
var_dump(__METHOD__);
27+
var_dump($offset);
28+
return true;
29+
}
30+
}
31+
32+
$no = new NoImplement();
33+
$do = new DoImplement();
34+
35+
$no['foo'];
36+
var_dump($no);
37+
38+
$do['foo'];
39+
var_dump($do);
40+
41+
?>
42+
--EXPECTF--
43+
object(NoImplement)#1 (7) {
44+
["read"]=>
45+
bool(true)
46+
["write"]=>
47+
bool(false)
48+
["has"]=>
49+
bool(false)
50+
["unset"]=>
51+
bool(false)
52+
["readType"]=>
53+
int(0)
54+
["hasOffset"]=>
55+
bool(true)
56+
["checkEmpty"]=>
57+
uninitialized(int)
58+
["offset"]=>
59+
string(3) "foo"
60+
}
61+
object(DoImplement)#2 (7) {
62+
["read"]=>
63+
bool(true)
64+
["write"]=>
65+
bool(false)
66+
["has"]=>
67+
bool(false)
68+
["unset"]=>
69+
bool(false)
70+
["readType"]=>
71+
int(0)
72+
["hasOffset"]=>
73+
bool(true)
74+
["checkEmpty"]=>
75+
uninitialized(int)
76+
["offset"]=>
77+
string(3) "foo"
78+
}

0 commit comments

Comments
 (0)