我不有很多的PHP的經驗,我會需要一些幫助, 我有一個PHP的MVC框架, 我使用這個類:PHP DI容器
class Registry {
private $objects;
private $settings;
public function __construct() {
}
public function iniObject($class, $key)
{
$this->objects[ $key ] = new $class($this);
}
public function getObject($key)
{
return $this->objects[ $key ];
}
public function storeSetting($setting, $key)
{
$this->settings[ $key ] = $setting;
}
public function getSetting($key)
{
return $this->settings[ $key ];
}
}
然後我通過註冊表來其他類,如:
Class Controller
{
/*
* @registry object
*/
protected $registry;
function __construct(Registry $registry)
{
$this->registry = $registry;
//i can use any class from my registry class like the logger class below
$this->registry->getObject('log')->write_log('debug', "Controller Class Initialized");
}
/**
* @all controllers must contain an index method
*/
public function index() {}
}
我開始我的bootstrap.php與
$registry = new Registry();
// Instantiate some classes
$registry->iniObject('Utf8', 'utf8');
$registry->iniObject('Uri', 'uri');
$registry->iniObject('Router', 'router');
i get any method like:
$registry->getObject('router')->_set_routing();
,我也得到一個鑑於這樣的:
$registry->getObject('output')->_display('myview');
這樣我可以使用其他類 通過像DI構造註冊表類中的所有類
,效果很好, 一些代碼和快速執行,
我一直在讀關於DI容器和其他東西, 我想知道更好的方法來做到這一點,如果註冊表得到 越來越大,將如何影響框架我的意思是我通過 所有的註冊表,以每個類,有一種方式只傳遞 依賴關係,每個類需要完整的註冊表, 是註冊表使用對象的最佳方式cos允許我 使用任何其他類中的任何類或您的事情這不是很好 方式做到這一點,關於DI容器庫的任何建議, 請我想從更有經驗的php 接受想法做這 多謝
嗨,感謝您的回覆, –
那麼你推薦如果你必須使用很多類,可以需要其他類的方法,我一直在玩symfony DI你有沒有測試過 –
我已經測試過symfony,但是我不喜歡配置風格。我正在使用yadif的修改版本(https://github.com/beberlei/yadif)。話雖如此,如果您覺得symfony可以很好地與您的應用程序配合使用,那麼它也是一個可行的選擇。 – F21