为什么用了依赖注入的函数可以直接访问但是调用它却要传参?

发布于 2022-09-11 23:46:35 字数 257 浏览 18 评论 0

比如用了依赖注入的函数放在控制器里可以直接在curl访问
image.png

但是当成函数调用的时候却必须传参,这是为何?
image.png

image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烟雨凡馨 2022-09-18 23:46:35

因为你直接调用函数,并没有经过容器。
容器还有一个 call 方法,传递参数类似于 call_user_func_array ,只是其还多了第三个参数,默认方法。

其次,第一个参数可以是路由那样的 命名空间/类名@方法名 ,也可以是 [对象,方法名],的形式去传递。
第二个参数中,对象值在容器中有注册挂载的,会自动处理,你也可以手动指定,通过数组键值对的方式,

比如 esCanShowQueryBuilder 对象,你可以不传递第二个参数,就会自动创建 Builder对象,并且成功调用,
你也可以自己指定。['builder'=>$query] ,其中 数组的键名就是形参名字,值就是要给定的值。

app()->call([Document::class,'esCanShowQuery'])

// or

app()->call([Document::class,'esCanShowQuery'],['builder'=>$query])

// 如果是非静态方法,需要先实例化,静态方法直接传递类名
递刀给你 2022-09-18 23:46:35

你没看到,不代表没传。依赖注入说白了就是容器类帮你实例化并传了值,不是没有传。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文