現在的框架中都有乙個容器, 而容器解決依賴的問題是通過反射來達到的,
首先先說明一下專案檔案結構:
└─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接下來...