簡單對象注入
我們先在app/下新建一個Service文件夾並新建一個UserService類,用於注入
<?php
namespace App\Service;
class UserService
{
public function getInfoById(int $id)
{
return $id;
}
}
1.構造函數的方式實現依賴注入
<?php
namespace App\Controller;
use Hyperf\HttpServer\Annotation\AutoController;
use Hyperf\HttpServer\Annotation\Controller;
use App\Service\UserService; //要注入的類
/**
* Class HyperfDiController
* @package App\Controller
* @AutoController() //路由註解
*/
class HyperfDiController
{
/**
* @var Userservice
*/
private $Userservice;
/**
* 通過構造函數參數上聲明參數類型的方式實現注入
*/
public function __construct(Userservice $Userservice)
{
//將注入的類對象賦值給私有屬性
$this->Userservice = $Userservice;
}
public function index()
{
//直接使用 調用Service類中的getInfoById方法
return $this->Userservice->getInfoById(1);
}
}
2.通過@Inject註解配合@var的值完成依賴注入
<?php
namespace App\Controller;
use Hyperf\Di\Annotation\Inject;//引入@Inject註解
use Hyperf\HttpServer\Annotation\AutoController;
use Hyperf\HttpServer\Annotation\Controller;
use App\Service\UserService; //要注入的類
/**
* Class HyperfDiController
* @package App\Controller
* @AutoController() //路由註解
*/
class HyperfDiController
{
/**
* 通過`@Inject()`註解注入,由`@var`聲明的屬性類型對象
* @Inject()
* @var Userservice
*/
private $Userservice;
public function index()
{
//直接使用 調用Service類中的getInfoById方法
return $this->Userservice->getInfoById(1);
}
}
抽象對象注入
我們現在來修改一下我們需要注入的UserService類