app()->make第二个参数怎么传数组

浅宇吖_4074

浅宇吖_4074

2026-09-25

747人浏览

原创

app()->make()的第二个参数必须是关联数组且键名严格匹配构造函数参数名,不支持索引数组、键名不匹配、嵌套对象或闭包,laravel 9+ 中该参数已标记为@internal,不建议业务代码依赖。

app()->make第二个参数怎么传数组make第二个参数怎么传数组">

app()->make 的第二个参数必须是关联数组,且键名需与构造函数参数名完全一致

Laravel 的 app()->make() 默认只接受服务名(字符串)作为第一个参数,第二个参数是可选的 $parameters,用于覆盖依赖注入时的构造参数。但它**不是任意数组都能传**——必须是关联数组,且 key 必须严格匹配目标类构造函数中形参的变量名。

常见错误现象:
传入索引数组(如 [1, 'foo'])会直接报错 Too few arguments to function;传入 key 不匹配的关联数组(如 ['name' => 'xxx'] 但构造函数参数叫 $title),参数会被忽略,仍走自动解析或报错。

  • 确保类构造函数形参有明确变量名,例如:
    public function __construct(string $apiUrl, int $timeout = 30) { ... }
  • 调用时传入的数组 key 必须是 'apiUrl' 和 'timeout',不能是 'url' 或 't'
  • 未提供的参数仍由容器自动解析(比如类型提示的类依赖),但显式传入的值会优先覆盖

不支持嵌套对象或闭包作为 $parameters 的值

app()->make() 的第二个参数仅用于“构造函数最外层的标量或简单对象”,它不会递归解析嵌套结构,也不接受闭包来延迟计算。

  • 传 ['config' => ['host' => 'x']] 没用:如果构造函数期待的是 Config $config,那这个数组不会自动转成 Config 实例
  • 传 ['logger' => fn() => app('log')] 会原样传入,不会执行,导致类型错误
  • 真正需要复杂初始化时,应改用 app()->build($class) + 手动 setConstructorParameters,或直接 new 实例

替代方案:用 app()->build() 更可控,尤其适合动态参数场景

当你要传的参数本身来自运行时计算、或涉及对象实例、或想绕过容器自动解析逻辑时,app()->build() 是更底层也更可靠的选择。

云雀语言模型
云雀语言模型

云雀语言模型是字节跳动研发的大规模预训练语言模型系列。

下载
  • app()->build(MyService::class) 返回一个未初始化的反射实例
  • 再调用 setConstructorParameters(['apiUrl' => 'https://api.x', 'client' => $httpClient])
  • 最后 resolve() 触发构造 —— 此时你传什么就进什么,无自动推断干扰
  • 注意:build() 不走绑定逻辑(比如 singleton 绑定),每次调用都新建实例

laravel 9+ 中 make() 第二个参数已标记为 @internal,不建议在业务代码中强依赖

查看 Laravel 源码可知,make($abstract, $parameters) 的第二个参数在 Container 类中被标注为 @internal,文档也未公开说明。它的存在主要是为框架内部(比如事件监听器解析、控制器方法注入)提供支持,而非面向开发者稳定 API。

这意味着:

  • 未来版本可能删掉该参数,或语义变更
  • 测试覆盖率低,边缘 case(如含默认值的可选参数)行为不稳定
  • 真要解耦依赖,推荐用接口绑定 + context-aware provider,而不是硬编码参数数组

实际项目里,看到别人用 app()->make(X::class, [...]),第一反应应该是检查是否真无法通过绑定配置解决 —— 大多数时候,问题出在设计上,不在调用方式上。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

20

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

0

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

0

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

0

12

Conan二进制包配置指南
Conan二进制包配置指南

本专题介绍Conan根据操作系统、编译器、架构和构建类型生成二进制包的方法,讲解Profile、Settings、Options及Package ID的作用,帮助管理不同平台和编译环境下的包版本。

2026.09.22

20

13

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

2026.09.22

0

19

loomy官网入口地址合集
loomy官网入口地址合集

本专题汇总了 Loomy 桌面 AI 助理的官方入口地址合集及使用指南。提供 macOS 与 Windows 客户端下载 。Loomy 是讯飞推出的桌面级 AI 工作搭子,支持文件整理、数据分析、网页操作及通过飞书/钉钉远程操控电脑,助你高效完成本地办公任务 。

2026.09.22

0

19

NumPy常见函数使用方法
NumPy常见函数使用方法

本专题整理 NumPy 常见函数使用方法相关教程,覆盖函数大全、参数用法、数组运算、统计聚合、排序处理、where 条件筛选、linspace 创建数列等常用场景,帮助读者快速掌握 NumPy 函数调用思路和实际数据处理技巧。

2026.09.22

0

21

NumPy性能优化版本更新与常见报错排查
NumPy性能优化版本更新与常见报错排查

本专题整理 NumPy 性能优化、版本更新与常见报错排查相关教程,覆盖向量化计算、广播性能、内存布局、NumPy 2.0 升级、版本兼容冲突、安装导入报错、dtype 溢出、矩阵运算异常和 broadcasting 报错修复,帮助读者系统掌握 NumPy 性能调优与问题定位方法。

2026.09.22

20

25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.2万人学习