关于 Laravel 闭包的问题
最近在看laravel 发现了很多不理解的问题,请教大神来解说一下,谢谢
在EventServiceProvider类中的register()方法中调用了,application的singleton()方法,然后这里面传的参数中有一个闭包函数,百度了很多,也不清楚这个闭包函数中的$app指的是什么,有人说啊application,在这个想请问一下,为什么$app就是application,难道类里面定义的$app,可以直接在方法中的闭包函数中使用?
另外一个问题就是
container类中的getClosure()方法,这里面也有一个闭包,这里面的$container,$parameters指定的又是什么?PHP官方对闭包解释的很含糊。谢谢各位大神来解读了,
关于 LearnKu
高认可度评论:
闭包函数的参数有哪些、是什么,并不能直观地看出。
例如你说的例子,你就需要去看
singleton()方法的源码:可以看到穿进去的闭包函数变成了变量
$concrete,那么想知道什么时候这个闭包函数会被调用、调用的参数是什么,就得一步步地去分析相关的代码,看看到底什么时候这个$concrete被调用了:可以看到这里只是把闭包存到了
$bindings这个属性里并没有被调用。最终的调用是:
可以看到传入了两个参数,第一个参数就是
$this,也就是Illuminate\Container\Container对象,也就是我们通常所理解的$app跪求各位大神,解释一下,万分感谢
看来你可能需要要装一个
xDebug+ 断点,等你发现更多新大陆 :smirk:闭包函数的参数有哪些、是什么,并不能直观地看出。
例如你说的例子,你就需要去看
singleton()方法的源码:可以看到穿进去的闭包函数变成了变量
$concrete,那么想知道什么时候这个闭包函数会被调用、调用的参数是什么,就得一步步地去分析相关的代码,看看到底什么时候这个$concrete被调用了:可以看到这里只是把闭包存到了
$bindings这个属性里并没有被调用。最终的调用是:
可以看到传入了两个参数,第一个参数就是
$this,也就是Illuminate\Container\Container对象,也就是我们通常所理解的$app不就一个参数吗...参数就是在函数调用的时候传进去的呀!
这个
$app就是一个形参,名字是啥都可以主要是看匿名函数执行的时候传入进来的实参当使用匿名函数做参数的时候, 在哪里执行了这个匿名函数, 执行的时候传的参数(
实参)换句话说
$app的值取决于你调用函数传入的值