我將盡我所能盡力解釋這一點,如果零件不具有完全意義,請原諒我。我正在構建一個用於教育目的的PHP庫/框架。我正在使用singleton模式構建它,但遇到了一些問題,最近似乎也認爲它不應該被使用,因爲它不是非常可測試的(儘管我並不擔心這是可測試的,但我想學習如何去做),而應該使用依賴注入。使用Dependancy Injection和共享變量的PHP設計模式?
我想要的是一個共享變量,如果你願意的話,它可以容納許多不同的類。例如$ app-> database; $ APP->的意見; $ APP->會議;等等,而且我不確定我是否正在做這件事。所有的課程也被自動加載。
我有引導/ start.php它初始化主變(有一個名字嗎?)有:
$app = new App(new Database, new Views, new Session);
在App.php類
我使用的主要有:
public $database;
public $views;
public $session
public function __construct(Client $client, Views $views, Session $session)
{
$this->database = $database;
$this->views = $views;
$this->session = $session;
}
我的問題是這樣的:我應該在構造函數中初始化所有的類嗎?還有一個大問題......如何在我的Views.php類中使用$ database變量而不創建可能會覆蓋Database類中某些屬性的全新實例?
希望能對此有所瞭解。
作爲一種方式,您可以在應用程序中創建靜態方法,它將返回數據庫,視圖實例 – sergio
您應該尋找像'Pimple'或'Symfony'這樣的容器,並創建'Client','Views',Session'服務。這樣,容器包含每個服務的1個實例。 現在對於依賴注入,如果'View'服務需要'Database'服務,那麼在他的構造函數中,你必須在裏面注入一個'Database'對象,並且在他的服務聲明中注入數據庫'服務' – Med
@Med謝謝答覆。我以前使用過Symfony容器,但是想看看我是否可以從頭開始自己解決一些問題。 – PumpkinJack