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) { }
我的疑问是传入任意一个对象就把闭包对象转换成原来的对象了吗?为什么会这样呢
我在 https://segmentfault.com/a/11... 疑问为什么传入个($this)就可以取出原来的对象了。
只拿第一个代码段举例子。
你是不是纳闷传进去的B对象,怎么打印的时候完全不见了,变成了A对象。
是因为虽然你
$a(new B());
了,但是匿名函数没接收啊,所以内部还是直接new A();
你把这段代码去执行感受一下: