PHP通過反射實現自動注入引數

2021-09-16 13:49:06 字數 1956 閱讀 9623

現在的框架中都有乙個容器, 而容器解決依賴的問題是通過反射來達到的,

首先先說明一下專案檔案結構:

└─index.php而我們要執行indexcontroller.php,而這個控制器的建構函式需要乙個request類,而request類建構函式需要乙個http類。

<?php

namespace waitmoonman\reflex\controllers;

use waitmoonman\reflex\request;

class indexcontroller

}

<?php

namespace waitmoonman\reflex;

use exception;

use reflectionclass;

// 檢視是否用建構函式

$rel_method = $rel_class->getconstructor();

// 沒有建構函式的話,就可以直接 new 本型別了

if (is_null($rel_method))

// 有建構函式的話就獲取建構函式的引數

$dependencies = $rel_method->getparameters();

// 處理,把傳入的索引陣列變成關聯陣列, 鍵為函式引數的名字

foreach ($parameters as $key => $value)

}// 處理依賴關係

$actual_parameters = ;

foreach ($dependencies as $dependenci)

elseif (is_null($class_name))

$actual_parameters = $dependenci->getdefaultvalue();

}else

}// 獲得建構函式的陣列之後就可以例項化了

// 要實現自動載入

require 'vendor/autoload.php';

// new 乙個 reflectionclass 類, 放入需要例項的類名

var_dump($ctl);

輸出:

我是 waitmoonman\reflex\controllers\indexcontroller 我依賴waitmoonman\reflex\request -> waitmoonman\reflex\http

f:\phpstudy\www\reflex\index.php:12:

object(waitmoonman\reflex\controllers\indexcontroller)[9]

這就是乙個完整的反射類動態注入引數的例項。

以上**可以檢視我的git倉庫

PHP利用反射實現依賴注入

本文參考部落格 非常感謝原博主.為了加深理解,做了部分修改,增加了適當注釋.前一篇簡單理解了php依賴注入,在實際開發過程中,我們並不知道依賴的類將來會擴充套件成什麼樣子,因此我們需要在實現依賴注入的時候,通過容器利用php反射類去實現.這裡的容器其實就是乙個能通過反射類實現依賴注入,並且最終返回我...

PHP基於反射機制實現自動依賴注入的方法詳解

依賴注入又叫控制反轉,使用過框架的人應該都不陌生。很多人一看名字就覺得是非常高大上的東西,就對它望而卻步,今天抽空研究了下,解開他它的神秘面紗。廢話不多說,直接上 工具類,使用該類來實現自動依賴注入。class ioc 執行類的方法 param type classname 類名 param typ...

PHP反射API實現自動載入

php具有完整的反射 api,新增了對類 介面 函式 方法和擴充套件進行反向工程的能力。在這裡我們通過乙個簡單的應用來展示一下反射api的魅力。讓我們來看看如何利用反射api實現自動載入模組 首先定義乙個modules介面,不同模組實現不同的execute 功能。inte ce modules接下來...