嘗試許多不同的技術之後,我發現功能可靠是這個方法:
使用的引導,或初始化文件。它位於該網站的ROOT中,並具有適當的許可並保護其免受直接訪問。
網站中的所有頁面都首先包含此文件。在它內部,我創建了所有的全局對象(設置,用戶),並從那裏引用它們。
例如:
// OBJECT CREATION
$Config = new Configuration();
$User = new User();
然後需要這些對象的類內:
public function __construct($id = NULL) {
global $Config; // DEPENDENCY INJECTION SOUNDS LIKE AN ADDICTION!
if($Config->allow_something) {
$this->can_do_something = true;
}
if(NULL !== $id) {
$this->load_record($id);
}
}
請注意,我剛剛從訪問這些全局對象的類中,我怎麼不有每次都包含對象變量作爲第一個構造函數參數。那變老了。
此外,擁有一個靜態數據庫類已經非常有用。我不必擔心傳球,我只能撥打$row = DB::select_row($sql_statement);
;查看PhpConsole類。
UPDATE 感謝給予好評,誰就做。它呼籲關注我的回答不是我引以爲豪的事實。雖然它可能有助於OP完成他們想要的任務,但這不是一個好習慣。
傳遞對象到新對象構造是一個很好的做法(依賴注入),雖然「不方便」,就像生活中的其他事情,額外的努力是值得的。
我的答案的唯一可取之處的部分是利用門面模式(例如DB :: select_row())。這不一定是單身(OP是想要避免的),並且讓你有機會呈現精簡的界面。
Laravel是一個現代化的PHP框架,使用依賴注入和外觀以及其他久經考驗的設計模式。我建議任何新手開發人員仔細閱讀這些和其他這樣的設計實踐。
+1經常出現同樣的問題。非常有興趣聽到這裏會出現什麼。 – 2009-10-31 14:37:45
單身人士遇到的測試問題是什麼? – 2009-10-31 14:42:45
該技術不適用於鬆散耦合 – Dan 2009-10-31 14:48:24