PHP單例模式應用情境有哪些?

來源:互聯網
上載者:User
網上看到一些達人寫購物車用“單例模式”,不知道是怎麼考慮的,按照java下的單例模式理解,豈不是整個應用程式都只有一個購物車類了?這樣購物車資料不就在一起混著了嗎?同時,PHP是指令碼語言,單例模式有意義嗎?頁面執行完,不是所有的東西都被回收?請對PHP單例模式機制有深入瞭解的大神在這裡談談自己的看法,謝謝!
PS.比如這個達人寫的購物車:http://www.thinkphp.cn/topic/5205.html

回複內容:

網上看到一些達人寫購物車用“單例模式”,不知道是怎麼考慮的,按照java下的單例模式理解,豈不是整個應用程式都只有一個購物車類了?這樣購物車資料不就在一起混著了嗎?同時,PHP是指令碼語言,單例模式有意義嗎?頁面執行完,不是所有的東西都被回收?請對PHP單例模式機制有深入瞭解的大神在這裡談談自己的看法,謝謝!
PS.比如這個達人寫的購物車:http://www.thinkphp.cn/topic/5205.html

有意義呀,比如你有個資料庫物件 DB,非單例的做法就是每次用時

$db = new DB();....$db->query("....");

用單例,你只需要在Factory 方法裡判斷是否已經初始化過了對象,有就返回,第一次就初始化,程式退出時斷開(__destruct),用起來就簡單了。

$db = DB::getInstance();$db->query("....");// 或$db = DB::getInstance("db2");$db->insert("xxx", $data);

甚至直接封裝成常用函數

DB::query("....");

這樣如果你的程式裡有很多位於不同層級的地方要使用 DB 對象,只管找 DB 類要就是了,第一次的時候串連,之後都不會重複串連資料庫。

單例的應用面很廣,可以用在 Cache, Log 等各種資源需要被頻繁調用的地方。

哦,你是在拿 Java 的比較呀。單例並非你想的那樣必須整個程式(姑且理解為進程吧)一個執行個體,要看編寫的人怎麼做的和他的意圖。在 Servlet 裡有 Request, Application, Session 幾個不同的範圍,當然也可以利用 LocalThread 等線上程內共用,我猜想你同事的購物車應該是 Session 或 Application 下的吧,只會對當前會話或應用有效。

PHP是指令碼語言,單例模式有意義嗎?頁面執行完,不是所有的東西都被回收?
你這裡說的並沒有錯,但是說php單例模式沒有意義就要打問號了,我php架構緊緊熟悉CI,CI也不例外的採用單利模式

public static function &get_instance(){    return self::$instance;}

那麼他為什麼要這麼做呢?我舉一個簡單的例子,ci允許使用者使用第三方類庫,或者你自己寫的協助類等等。你在使用這些類庫的時候,如果你想在這些類庫中持有對CI的引用的話,很見得的一個方法,直接在某個功能模組中get_instance,就得到了你本次執行的CI執行個體了,試想一下,CI樣本的上下文環境也被隨之帶過來了,那麼就可以使用你的類庫來對CI執行個體中的一些資料進行一些處理了。

我這裡這麼說,興許還是有些牽強,也許會有人說CI那裡壓根就不是單例模式,構造方法都不是私人的,那我只能說你對單例理解有點狹隘了。

在一個php架構的核心,絕對是不需要你載入兩個的,一次執行中,一個就夠了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.