<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                # 依賴注入 1。依賴:A做一件事時,必須要B幫忙,A依賴B。 比如手機充電, 需要找一個帶電的插座吧。 沒有帶電插座就不行。 ![](https://img.kancloud.cn/e8/8b/e88bc775706931eb4e4cbc1d9c597cec_500x500.png) - - - - - - 2。當然我們用充電保也可以啊。那來看看程序吧。一個收貨地址解釋服務的事 ``` <pre class="calibre7">``` <?php //A 平臺 收貨地址解釋類 class AAddressApi { public function explain($address) { return ['xxx省xx市', 'X三', 'xx手機號碼']; } } //程序有一個接口,代理復制客戶的 商品信息跟收貨地址,復制粘貼就可以,下單 class PlaceOrder { //分析字符串中的 商品信息,跟地址信息 public function explain($str) { //把字符串中的,商品信息,跟收貨地址信息分離出來 [$product, $address] = $this->product2address($str); //依賴 AAddressApi 這個類,這里寫死了 AAddressApi,我必須要它,沒有它我就不行 [$addr, $name, $phone] = (new AAddressApi())->explain($address); var_dump("{$product}下單成功,發貨到{$addr},{$name},{$phone}"); } public function product2address($str) { return ['華為手機Mate 80PRO', 'XXX省xx市x三,xx手機號碼']; } } $placeOrder = new PlaceOrder(); $placeOrder->explain('xxx'); ``` 3。然后有一天 AAddressApi 這個平臺,老板轉做包租公了,平臺就沒做了。 那個類 PlaceOrder 就會出錯了。那怎么讓 就算 A平臺關閉了,PlaceOrder 也不出錯呢 。就是不要把 依賴寫死。 ``` //A 平臺收貨地址解釋類 class AAddressApi { public function explain($address) { return ['xxx省xx市', 'X三', 'xx手機號碼']; } } //百度平臺 收貨地址解釋類 class BaiduAddressApi { public function explain($address) { return ['xxx省xx市', 'X三', 'xx手機號碼']; } } class PlaceOrder { public $addressApi; //依賴的類,從外面,傳遞進來 public function __construct($addressApi) { $this->addressApi = $addressApi; } //分析字符串中的 商品信息,跟地址信息 public function explain($str) { [$product, $address] = $this->product2address($str); //不知道使用的是哪個對象。只要能解釋地址就行 [$addr, $name, $phone] = $this->addressApi->explain($address); var_dump("{$product}下單成功,發貨到{$addr},{$name},{$phone}"); } public function product2address($str) { return ['華為手機Mate 80PRO', 'XXX省xx市x三,xx手機號碼']; } } //依賴的類,new 的時候,通過參數,傳遞進去 $placeOrder = new PlaceOrder(new AAddressApi()); $placeOrder->explain('xxx'); $placeOrder = new PlaceOrder(new BaiduAddressApi()); $placeOrder->explain('xxx'); ``` 4。這樣 PlaceOrder 不需要修改就,也可以正常運行了。那問題來了,為什么要這樣寫呢把 ``` //類如,下面這種寫法 new PlaceOrder(new AAddressApi()) //A平臺沒用了,所有地方,不都得要修改。 new PlaceOrder(new BaiduAddressApi()) ``` 5。而且每次 new PlaceOrder() 還得寫成 new PlaceOrder(new BaiduAddressApi()),更加麻煩。 下面以TP6框架為例,在”簡單工廠“中介紹相關內容
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看