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这个匿名函数并没有接受参数的