关于 Laravel 闭包的问题

最近在看laravel 发现了很多不理解的问题,请教大神来解说一下,谢谢
file
在EventServiceProvider类中的register()方法中调用了,application的singleton()方法,然后这里面传的参数中有一个闭包函数,百度了很多,也不清楚这个闭包函数中的$app指的是什么,有人说啊application,在这个想请问一下,为什么$app就是application,难道类里面定义的$app,可以直接在方法中的闭包函数中使用?
另外一个问题就是
file
container类中的getClosure()方法,这里面也有一个闭包,这里面的$container,$parameters指定的又是什么?PHP官方对闭包解释的很含糊。谢谢各位大神来解读了,

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 4
leo

闭包函数的参数有哪些、是什么,并不能直观地看出。

例如你说的例子,你就需要去看 singleton() 方法的源码:

public function singleton($abstract, $concrete = null)
{
    $this->bind($abstract, $concrete, true);
}

可以看到穿进去的闭包函数变成了变量 $concrete,那么想知道什么时候这个闭包函数会被调用、调用的参数是什么,就得一步步地去分析相关的代码,看看到底什么时候这个 $concrete 被调用了:

file

可以看到这里只是把闭包存到了 $bindings 这个属性里并没有被调用。

最终的调用是:

file

可以看到传入了两个参数,第一个参数就是 $this,也就是 Illuminate\Container\Container 对象,也就是我们通常所理解的 $app

5年前 评论

跪求各位大神,解释一下,万分感谢

5年前 评论

看来你可能需要要装一个 xDebug + 断点,等你发现更多新大陆 :smirk:

5年前 评论
leo

闭包函数的参数有哪些、是什么,并不能直观地看出。

例如你说的例子,你就需要去看 singleton() 方法的源码:

public function singleton($abstract, $concrete = null)
{
    $this->bind($abstract, $concrete, true);
}

可以看到穿进去的闭包函数变成了变量 $concrete,那么想知道什么时候这个闭包函数会被调用、调用的参数是什么,就得一步步地去分析相关的代码,看看到底什么时候这个 $concrete 被调用了:

file

可以看到这里只是把闭包存到了 $bindings 这个属性里并没有被调用。

最终的调用是:

file

可以看到传入了两个参数,第一个参数就是 $this,也就是 Illuminate\Container\Container 对象,也就是我们通常所理解的 $app

5年前 评论
ruke

不就一个参数吗...参数就是在函数调用的时候传进去的呀!
这个$app就是一个形参,名字是啥都可以主要是看匿名函数执行的时候传入进来的实参

当使用匿名函数做参数的时候, 在哪里执行了这个匿名函数, 执行的时候传的参数(实参)
换句话说$app的值取决于你调用函数传入的值

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!