class A{}
class B{}
$a = function (){
$a = new A();
var_dump($a);
return $a;
};
var_dump($a);
$b = $a(new B());
var_dump($b);
<strong>
输出:object(Closure)#1 (0) { }
object(A)#3 (0) { }
object(A)#3 (0) { }
</strong>
class A{}
class C{}
class B{
public function run(){
$b = function (){
return new A();
};
var_dump($b);
var_dump($this);
return $b(new C());
}
}
$b = new B();
var_dump($b->run());
输出:object(Closure)#2 (1) { ["this"]=> object(B)#1 (0) { } }
object(B)#1 (0) { }
object(A)#4 (0) { }
我的疑問是傳入任意一個物件就把閉包物件轉換成原來的物件了嗎?為什麼會這樣呢
我在 /a/11... 疑問為什麼傳入個($this)就可以取出原來的物件了。
只拿第一個程式碼段舉例子。
你是不是納悶傳進去的B對象,怎麼印的時候完全不見了,變成了A對象。
是因為雖然你
$a(new B());
了,但是匿名函数没接收啊,所以内部还是直接new A();
你把這段程式碼去執行感受一下:
$b(new C()) 你$b這個匿名函數並沒有接受參數的