xref: /PHP-7.4/Zend/tests/closure_014.phpt (revision d5ef2f46)
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