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