Swoole框架Hyperf(四) - 依賴注入

先別看懂,先閱讀,在後半部分講解這個是幹嘛的。其實這個我們平時在其它框架裏很常用,就是不知道它的名字叫做依賴注入。

爲了本地和linux虛擬機實現愉快的同步代碼,所以可藉助WinSCP 本地文件與服務器自動同步
我將框架拉到了本地
在這裏插入圖片描述
都選中根目錄
在這裏插入圖片描述
然後就可以在本地用編輯器直接編輯與新建文件了,將會自動同步到linux。主要是爲了能按Ctrl看路徑。

正文

假設我們需要在 IndexController 內調用 UserService 類的 getInfoById(int $id) 方法。

App\Service\UserService.php

<?php
namespace App\Service;

class UserService
{
    public function getInfoById(int $id)
    {
        return $id;
    }
}

通過構造方法注入,該例子只是便於理解,無需重視

App\Controller\IndexController.php

<?php
namespace App\Controller;

use App\Service\UserService;
use Hyperf\HttpServer\Annotation\AutoController;

/**
 * @AutoController()
 */
class IndexController
{
    /**
     * @var UserService
     */
    private $userService;

    // 通過在構造函數的參數上聲明參數類型完成自動注入
    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }

    public function index()
    {
        $id = 123;
        // 直接使用
        return $this->userService->getInfoById($id);
    }
}
http://192.168.1.109:9501/index/index

通過 @Inject 註解注入

<?php
namespace App\Controller;

use App\Service\UserService;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\AutoController;

/**
 * @AutoController()
 */
class IndexController
{
    /**
     * 通過 `@Inject` 註解注入由 `@var` 註解聲明的屬性類型對象
     *
     * @Inject
     * @var UserService
     */
    private $userService;

    public function index()
    {
        $id = 2333;
        // 直接使用
        return $this->userService->getInfoById($id);
    }
}
http://192.168.1.109:9501/index/index

在這裏插入圖片描述

注意到了嗎?其實就是調用了某個類。
在這裏插入圖片描述
箭頭所指都是同一個類。

其實就是使你不需要去new而已,通過@var直接可在index控制器中使用某個類。
而構造方法的方式沒有用到@Inject,所以需要通過構造方法初始化賦值。

通過加入@Inject註解,就可以不使用構造方法也可達到效果。

Hyperf框架系列列表

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章