xref: /PHP-8.0/Zend/tests/closure_014.phpt (revision f8d79582)
1--TEST--
2Closure 014: return by value/reference
3--FILE--
4<?php
5class C1 {
6    function __invoke() {
7        return 0;
8    }
9}
10class C2 {
11    function &__invoke(&$a) {
12        return $a;
13    }
14}
15class C3 {
16    function __invoke() {
17    }
18}
19
20$x = new C1();
21var_dump($x());
22var_dump($x->__invoke());
23$x();
24$x->__invoke();
25$x = function() {
26    return 0;
27};
28var_dump($x());
29var_dump($x->__invoke());
30$x();
31$x->__invoke();
32
33$x = new C2();
34$a = $b = $c = $d = 1;
35$e =& $x($a);
36$e = 2;
37var_dump($a);
38$e =& $x->__invoke($b);
39$e = 3;
40var_dump($b);
41$x($b);
42$x->__invoke($b);
43$x = function & (&$a) {
44    return $a;
45};
46$e =& $x($c);
47$e = 4;
48var_dump($c);
49$e =& $x->__invoke($d);
50$e = 5;
51var_dump($d);
52$x($d);
53$x->__invoke($d);
54
55$x = new C3();
56var_dump($x());
57var_dump($x->__invoke());
58$x();
59$x->__invoke();
60$x = function() {
61};
62var_dump($x());
63var_dump($x->__invoke());
64$x();
65$x->__invoke();
66?>
67--EXPECT--
68int(0)
69int(0)
70int(0)
71int(0)
72int(2)
73int(3)
74int(4)
75int(5)
76NULL
77NULL
78NULL
79NULL
80