辛星和您一起解析PHP中的單例模式

來源:互聯網
上載者:User

標籤:辛星   單例   設計模式   php   模式   

     其實單例模式還是用的挺多的,要說到最經典的例子,可能就是操縱資料庫的類了,它如果是單例的話,可以避免大量的new操作消耗資源,而如果系統中需要一個類來管理全域的資訊,則把它用成單例也是很不錯的,因為它是全域有效,我們無需多次執行個體化。

    下面是正確的調用方式樣本:

<?phpclass Xin{//儲存該類的執行個體private static $_instance;//不讓外部調用該建構函式private function __construct(){echo "辛星加油";}    //用於擷取執行個體,必須是靜態,否則外部無法調用public static function get_instance(){//如果該單例不存在,則建立它if(!(self::$_instance instanceof self)){self::$_instance = new self;}//返回它既可return self::$_instance;}//不允許對象被複製public function __clone(){trigger_error('Clone Denyed!',E_USER_ERROR);}//功能函數public  function xin(){echo "調用Xin類的xin函數,辛星你好";}}//正確的調用方式$xin = Xin::get_instance();$xin->xin();

它的輸出,我想讀者也能猜到了:

辛星加油調用Xin類的xin函數,辛星你好

如果我們要複製對象的話,比如下面代碼:

<?phpclass Xin{//儲存該類的執行個體private static $_instance;//不讓外部調用該建構函式private function __construct(){echo "辛星加油";}    //用於擷取執行個體,必須是靜態,否則外部無法調用public static function get_instance(){//如果該單例不存在,則建立它if(!(self::$_instance instanceof self)){self::$_instance = new self;}//返回它既可return self::$_instance;}//不允許對象被複製public function __clone(){trigger_error('Clone Denyed!',E_USER_ERROR);}//功能函數public  function xin(){echo "調用Xin類的xin函數,辛星你好";}}//複製的時候會報錯的$xin = Xin::get_instance();$qian = clone $xin;

那麼會報錯資訊如下:

辛星加油( ! ) Fatal error: Clone Denyed! in D:\MyApp\wamp\www\err.php on line 22Call Stack

好啦,,鑒於單例模式本身就簡單,讀者有什麼不清楚的可以在下面留言,我會認真解答的。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.