1--TEST-- 2Closure 058: Closure scope and object 3--FILE-- 4<?php 5class A { 6 static function foo() { 7 return function () {var_dump(self::class,get_called_class());}; 8 } 9 function bar() { 10 return function () {var_dump(self::class,get_called_class(),$this);}; 11 } 12} 13$z = "call_user_func"; 14 15$a = A::foo(); 16$a(); 17$a->__invoke(); 18$c = array($a,"__invoke"); 19$c(); 20call_user_func(array($a,"__invoke")); 21$z(array($a,"__invoke")); 22 23echo "\n"; 24 25$x = new A(); 26$b = $x->bar(); 27$b(); 28$b->__invoke(); 29$c = array($b,"__invoke"); 30$c(); 31call_user_func(array($b,"__invoke")); 32$z(array($b,"__invoke")); 33?> 34--EXPECT-- 35string(1) "A" 36string(1) "A" 37string(1) "A" 38string(1) "A" 39string(1) "A" 40string(1) "A" 41string(1) "A" 42string(1) "A" 43string(1) "A" 44string(1) "A" 45 46string(1) "A" 47string(1) "A" 48object(A)#2 (0) { 49} 50string(1) "A" 51string(1) "A" 52object(A)#2 (0) { 53} 54string(1) "A" 55string(1) "A" 56object(A)#2 (0) { 57} 58string(1) "A" 59string(1) "A" 60object(A)#2 (0) { 61} 62string(1) "A" 63string(1) "A" 64object(A)#2 (0) { 65} 66