依賴注入由容器自動完成,有了反射機制之後,可以實現自主依賴注入。修改Rrequest
類的構造方法如下
namespace think;
class Request
{
public function __construct(App $app, $name)
{
var_dump($app instanceof App, $name);
}
}
同時修改 bindParams()
方法,用 getClass()
方法獲取引數型別提示,用 getName()
方法獲取建立例項的類名。
protected function bindParams(ReflectionFunctionAbstract $reflect, array $vars = []): array
{
// 如果類沒有配置引數,就直接返回空陣列
if ($reflect->getNumberOfParameters() == 0) {
return [];
}
$args = [];
// 獲取引數資訊
$params = $reflect->getParameters();
foreach ($params as $param) {
$name = $param->getName();
$class = $param->getClass();
if (isset($vars[$name])) {
$args[] = $vars[$name];
// 如果沒有傳參,就採用預設引數
} elseif ($param->isDefaultValueAvailable()) {
$args[] = $param->getDefaultValue();
// 如果獲取到引數型別,進一步實現例項化
} elseif ($class) {
$args[] = $this->make($class->getName());
}
}
訪問 diy.tp
,成功列印出
bool(true) string(4) "five"
表明成功利用反射實現依賴注入,之後刪除 Request
類的建構函式,以便以後的演示。
本作品採用《CC 協議》,轉載必須註明作者和本文連結