不少PHP框架都支持控制器方法参数注入,并且不用关心参数的顺序。举个例子,页面有个表单,可以提交name和phone两个字段,我们的控制器一般这么写:
1 | class IndexController{ |
支持参数注入的框架可以这样:
1 | class IndexController{ |
我们不用关心参数顺序,phone
可以放在name
之前,那么这是如何实现的呢?没错,就是反射,我们可以自己尝试着写一个简单的版本。
因为我们主要是聚集参数注入,所以请求解析、路由这两个点我们就略过,硬编码意思下:
1 | //申明控制器 |
运行结果:
对象注入原理也差不多,匹配之后从DI容器里拿到示例放入参数列表就行了。