搜索
php - 匿名函数 返回值的问题
phpcn_u1582
phpcn_u1582 2017-05-16 12:02:57
[PHP讨论组]
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)就可以取出原来的对象了。

phpcn_u1582
phpcn_u1582

全部回复(2)
ringa_lee

只拿第一个代码段举例子。
你是不是纳闷传进去的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);
世界只因有你
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这个匿名函数并没有接受参数的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号