1英文单词和文字隔开 2改进一条语句

修改理由:
相关信息:
- 类型:文档文章
- 文章: 依赖注入,控制反转,反射各个概念的理解和使用
- 文档: 《深入 Laravel 核心(5.5)》
此投稿已在 5年前 合并。
内容修改:
Old | New | Differences |
---|---|---|
50 | 50 | $user->login(); |
51 | 51 | ``` |
52 | 52 | |
53 | 上面的写法可以实现记录日志的功能,但是有一个问题,假设现在想用数据库记录日志的话,我们就得修改 | |
53 | 上面的写法可以实现记录日志的功能,但是有一个问题,假设现在想用数据库记录日志的话,我们就得修改 User 类,这份代码没达到解耦合,也不符合编程开放封闭原则,那如何修改呢?我们可以把日志处理类通过构造函数方式传递进去。下面我们试着修改 User 类的代码。 | |
54 | 54 | |
55 | 55 | ```php |
56 | 56 | class User | … | … |
75 | 75 | $user->login(); |
76 | 76 | ``` |
77 | 77 | |
78 | 这样想用任何方式记录操作日志都不需要去修改 | |
79 |
| |
80 | 那什么是依赖注入呢?,其实上面的例子也算是依赖注入,不是由自己内部 | |
78 | 这样想用任何方式记录操作日志都不需要去修改 User 类了,只需要通过构造函数参数传递就可以实现,其实这就是“控制反转”。不需要自己内容修改,改成由外部传递。这种由外部负责其依赖需求的行为,我们可以称其为 “控制反转(IoC)”。 | |
79 | ||
80 | 那什么是依赖注入呢?,其实上面的例子也算是依赖注入,不是由自己内部 new 对象或者实例,通过构造函数,或者方法传入的都属于 依赖注入(DI) 。 | |
81 | 81 | |
82 | 82 | |
83 | 83 | ## laravel依赖注入 |
84 | 84 | |
85 | 初学laravel的同学应该都比较好奇?很多对象实例通过方法参数定义就能传递进来,调用的时候不需要我们自己去手动传入。下面举一个laravel中实际的例子 Request | |
85 | 初学laravel的同学应该都比较好奇?很多对象实例通过方法参数定义就能传递进来,调用的时候不需要我们自己去手动传入。下面举一个laravel中实际的例子 Request 对象 会都被自动的注入到函数里。是不是比较好奇呢?laravel 是如何做到呢? | |
86 | 86 | |
87 | 87 | ```php |
88 | 88 | // routes/web.php | … | … |
105 | 105 | |
106 | 106 | ## 反射理解 |
107 | 107 | |
108 | 我们现在已经明白了依赖注入的概念。那 | |
109 |
| |
110 | 反射的概念其实可以理解成根据类名返回该类的任何信息,比如该类有什么方法,参数,变量等等。我们先来学习下反射要用到的 | |
108 | 我们现在已经明白了依赖注入的概念。那 laravel 是怎么实现呢?可能有些同学已经想到了这里面肯定会用到反射机制去创建动态Post,然后去调用 store 方法。 | |
109 | ||
110 | 反射的概念其实可以理解成根据类名返回该类的任何信息,比如该类有什么方法,参数,变量等等。我们先来学习下反射要用到的 api。拿 User 举例 | |
111 | 111 | |
112 | 112 | ```php |
113 | 113 | … | … |
129 | 129 | |
130 | 130 | ``` |
131 | 131 | |
132 | 这时候我们可以创建一个 | |
132 | 这时候我们可以创建一个 make 方法,传入 User,利用反射机制拿到 User 的构造函数,进而得到构造函数的参数对象。用递归的方式创建参数依赖。最后调用 newInstanceArgs 方法生成 User 实例。 可能有些同学还不是很理解。下面我们用代码去简单模拟下 | |
133 | 133 | |
134 | 134 | ```php |
135 | 135 | function make($concrete){ |