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)就可以取出原來的物件了。
ringa_lee2017-05-16 12:04:57
只拿第一個程式碼段舉例子。
你是不是納悶傳進去的B對象,怎麼印的時候完全不見了,變成了A對象。
是因為雖然你$a(new B());
了,但是匿名函数没接收啊,所以内部还是直接new A();
你把這段程式碼去執行感受一下:
<?php
class A{}
class B{}
$a = function ($unknow = null){ //这里要接收的
var_dump($unknow);
return $unknow;
};
var_dump($a);
$b = $a(new B());
var_dump($b);
世界只因有你2017-05-16 12:04:57
class A{}
class C{}
class B{
public function run(){
$b = function (){
var_dump(func_get_args()); //接收参数
return new A();
};
var_dump($b); //第一次输出 $b 闭包
var_dump($this); //第二次输出 $this。 就是class B
return $b(new C());
}
}
$b = new B();
var_dump($b->run()); //第三次输出 是$b这个匿名函数的返回值 class A
$b(new C()) 你$b這個匿名函數並沒有接受參數的