多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 依赖注入 ## 依赖注入也叫控制反转 1. 依赖注入主要是用来减少代码间的耦合 2. 有效分离对象和它所需的外部资源 由于访问控制器的参数都来自于URL请求,普通变量就是通过参数绑定自动获取,对象变量则是通过依赖注入生成。 假设有人需要买车需要花费xx元 t同样为了简化测试 在extend目录创建di文件夹 #### 首先创建Car.php类 方法中返回需要话费多少钱 ``` <pre class="calibre13">``` <span class="token"><</span><span class="token">?</span>php namespace di<span class="token1">;</span> <span class="token2">class</span> <span class="token3">Car</span> <span class="token1">{</span> <span class="token2">public</span> <span class="token2">function</span> <span class="token3">pay</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> <span class="token6">// 价格123</span> <span class="token2">return</span> <span class="token5">123</span><span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` #### 创建Person类 创建buy方法 去调用pay方法的价格 ``` <pre class="calibre13">``` <span class="token"><</span><span class="token">?</span>php namespace di<span class="token1">;</span> <span class="token2">class</span> <span class="token3">Person</span> <span class="token1">{</span> <span class="token6">/** * 依赖:Person类依赖Car类 * 注入:Car类注入Person 因为Car类不是固定的 * 因为可能不只是买车 可能还是买其他 所以是其他注入Person * @return */</span> <span class="token2">public</span> <span class="token2">function</span> <span class="token3">buy</span><span class="token1">(</span>$obj<span class="token1">)</span> <span class="token1">{</span> <span class="token6">// $price = new Car();</span> <span class="token6">//return $price->pay(); //获取价格</span> <span class="token2">return</span> $obj<span class="token">-</span><span class="token">></span><span class="token3">pay</span><span class="token1">(</span><span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` 在 首页控制器中调用 ``` <pre class="calibre13">``` <span class="token"><</span><span class="token">?</span>php namespace app\index\controller<span class="token1">;</span> use di\Book<span class="token1">;</span> use di\Car<span class="token1">;</span> use di\Person<span class="token1">;</span> <span class="token2">class</span> <span class="token3">Index</span> <span class="token1">{</span> <span class="token2">public</span> <span class="token2">function</span> <span class="token3">index</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> <span class="token6">// $PersonObj = new Person();</span> <span class="token6">//return $PersonObj->buy();</span> $PersonObj <span class="token">=</span> <span class="token2">new</span> <span class="token3">Person</span><span class="token1">(</span><span class="token1">)</span><span class="token1">;</span> $book <span class="token">=</span> <span class="token2">new</span> <span class="token3">Book</span><span class="token1">(</span><span class="token1">)</span><span class="token1">;</span> <span class="token2">return</span> $PersonObj<span class="token">-</span><span class="token">></span><span class="token3">buy</span><span class="token1">(</span>$book<span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` 因为 Book.php Car.php Person.php三个文件 都在di文件下 所以可以直接使用new来调用