xref: /PHP-8.3/tests/lang/bug24658.phpt (revision 960318ed)
1--TEST--
2Bug #24658 (combo of typehint / reference causes crash)
3--FILE--
4<?php
5class foo {}
6function no_typehint($a) {
7    var_dump($a);
8}
9function typehint(foo $a) {
10    var_dump($a);
11}
12function no_typehint_ref(&$a) {
13    var_dump($a);
14}
15function typehint_ref(foo &$a) {
16    var_dump($a);
17}
18$v = new foo();
19$a = array(new foo(), 1, 2);
20no_typehint($v);
21typehint($v);
22no_typehint_ref($v);
23typehint_ref($v);
24echo "===no_typehint===\n";
25array_walk($a, 'no_typehint');
26echo "===no_typehint_ref===\n";
27array_walk($a, 'no_typehint_ref');
28echo "===typehint===\n";
29array_walk($a, 'typehint');
30echo "===typehint_ref===\n";
31array_walk($a, 'typehint_ref');
32?>
33--EXPECTF--
34object(foo)#%d (0) {
35}
36object(foo)#%d (0) {
37}
38object(foo)#%d (0) {
39}
40object(foo)#%d (0) {
41}
42===no_typehint===
43object(foo)#%d (0) {
44}
45int(1)
46int(2)
47===no_typehint_ref===
48object(foo)#%d (0) {
49}
50int(1)
51int(2)
52===typehint===
53object(foo)#%d (0) {
54}
55
56Fatal error: Uncaught TypeError: typehint(): Argument #1 ($a) must be of type foo, int given in %s:%d
57Stack trace:
58#0 [internal function]: typehint(1, 1)
59#1 %s(%d): array_walk(Array, 'typehint')
60#2 {main}
61  thrown in %s on line %d
62