我們的項目有一些數據存儲在一個$_SESSION['app']
。有一個「主」對象包含大約10個可以在代碼中使用的其他對象的公共實例。實際上,其中只有一個是經常使用的($_SESSION['app']->login->getuserId()
),其中兩個總共只用了4-5次。
由於我們已經創建了一個RESTful API,除了我們的項目外,我們還想在API中使用我們的一些項目功能,因此需要擺脫幾乎所有對象中的許多方法中使用的會話,從長遠來看,我們希望完全切換到Client和Server之間的RESTful通信。
由於我們是一個小團隊,我們不能一次重構所有代碼,但需要一步一步完成,而不會在此期間破壞代碼。
我第一次嘗試正在改變會話對象到一個單是這樣的:
class Main {
private static $main = null;
public static function getInstance() {
self::$main = $_SESSION['app'] ?? self::$main ?? new Main();
return self::$main;
}
public function __construct {
// ...
}
}
這樣一段時間,我們可以離開的$ _SESSION [「應用」],因爲它是和後來的實例在一小步工作中完全刪除會話。我的嘗試迄今還行,但它只改變了我們對Main
類的概念性問題。
另外我讀過使用單例模式在大多數情況下是一個壞主意,並理解該觀點的論據。在我們的項目中,我們還沒有使用單元測試,但我希望至少能夠很快使用它。
那麼會是什麼一個更好,更可靠的方式來擺脫我們$_SESSION
-variable和的方式,它可以從任何地方訪問處理類似的userID
數據,以便最終我們可以有一個RESTful認證而不是一個會話?
難道你只是繼續按原樣使用它 - 但不是從會話中填充數組,而是從經過身份驗證的用戶(即使用jwt)中獲取所需的任何內容( – JimL