首頁 > 後端開發 > php教程 > PHP 資料庫存取真的需要單例嗎?

PHP 資料庫存取真的需要單例嗎?

Patricia Arquette
發布: 2024-12-22 22:40:11
原創
325 人瀏覽過

Are Singletons Really Necessary for PHP Database Access?

單例:PHP 資料庫存取中的神話

您正在質疑單例用於PHP 資料庫存取的必要性,考慮以下簡化的單例類別:

class Database {
    private static $db;

    private function __construct(){}

    static function get() {
        if(!isset(self::$db))
            self::$db = new PDO(...);

        return self::$db;
    }
}
登入後複製

你想知道為什麼這還不夠,而不是更多具有singleton()方法的複雜單例類別。

揭穿PHP 中單例的效用

在PHP 中,單例幾乎沒有優點:

  • 記憶體保護:單例旨在減少記憶體使用通過共享共享記憶體中的實例。然而,在 PHP 中,物件駐留在私有請求記憶體中,使得此目的無關緊要。
  • 強制單例:概念單例可能不需要語言機制來強制執行。建立第二個實例時只考慮單例會造成不良影響。

單例的缺點

  • 全域耦合:單例引入全域範圍的依賴關係,使測試變得複雜可維護性。
  • 依賴注入替代方案:當多個類別需要單一實例時,依賴注入提供了更乾淨、更可測試的解決方案。

Erich Gamma 的懷疑

甚至是單例的創建者之一模式,Erich Gamma,現在質疑它的實用性:

  • 「我贊成放棄Singleton。中單例的普遍懷疑,請考慮以下場景:

全域存取點:為同一請求中的實例建立全域存取點可能是合理的,但可能會引入耦合和維護挑戰。

消除第二個實例

:僅在存在時才實現單例迫切需要防止創建額外的實例。
  • 其他資源
  • [在 PHP中測單例:為什麼這樣棘手](link_to_How_is_testing_the_registry_pattern_or_singleton_hard_in_PHP)
[單例資料庫類別的缺點](link_to_What_are _the_disadvantages_of_using_a_PHP_database_class_as_a_singleton)

[決策圖單例](link_to_Singleton_Decision_Diagram)

以上是PHP 資料庫存取真的需要單例嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板