PHP 依賴注入擴充套件包 - 讓你在任何時候隨心所欲使用依賴注入「秀配圖 ^_^」

Destiny發表於2019-03-01

file

Laravel 的依賴注入用得很舒服,然後在網上搜了相關資料寫了一個不限於框架的輕量級依賴注入擴充套件包,使用場景就是你自己定義的方法,呼叫的時候也可以使用輕鬆的享受依賴注入「有沒有覺得配圖非常棒?」

Github 地址

要求

  • PHP >= 7.0

安裝

composer require iidestiny/dependency-injection -vvv

使用

使用輔助方法

    // 註冊你的自定義類
    di_register(Tools::class)

    // 呼叫你類中的方法
    di_register(Tools::class)->generate($param, $param, $param)

    // 類所有方法都可以呼叫
    di_register(Tools::class)->foo($bar)

實踐

例如有時候我們自定義的 Service 服務層可能也需要依賴注入其他工具類,但是我們控制器中已經依賴注入了 Service,呼叫 Service 中方法的時候就不能輕易的注入其他工具類,使用這個擴充套件包可以輕易解決這個問題,看下面例子。

<?php

namespace App\Services;

use App\Tools;
use App\User;
use Cache;
use Models\Order;

class OrderService
{
    /**
     * 下單
     *
     * @param User  $user
     * @param       $goods
     * @param       $address
     * @param Cache $cache
     * @param Tools $tools
     */
    public function placeOrder(User $user, $goods, $address, Cache $cache, Tools $tools)
    {
        // 下單邏輯,其中需要依賴注入 Cache 與 Tools
    }

    /**
     * pay
     *
     * @param Order $order
     * @param Cache $cache
     * @param Tools $tools
     */
    public function pay(Order $order, Cache $cache, Tools $tools)
    {
         // 支付邏輯,其中需要依賴注入 Cache 與 Tools
    }

}

我們可以輕易呼叫並享受 DI

    /**
     * store
     */
    public function store()
    {
        di_register(OrderService::class)->placeOrder($user, $goods, $address);
    }

或者

    /**
     * store
     */
    public function store()
    {
        $orderService = di_register(OrderService::class);

        $orderService->placeOrder($user, $goods, $address);
        $orderService->pay($order);
    }

PS

配圖是叫一個 Affinity Designer 的軟體裡面的樣板

將來的你一定會感謝現在努力的自己!

相關文章