乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      PHP 單件模式 - PHP程序總結&討論 - 西部PHP PHP社區(qū) - Powered...

       tianhao 2010-04-16
      PHP 單件模式
      對一些類來說,只有一個實例是很重要的。比如一個數據庫連接類實例。我們怎么樣才能保證一個類只有一個實例并且這個實例易于被訪問呢?一個全局變量 使得一個對象可以被訪問,但它不能防止你實例化多個對象,而且全局變量會帶來意想不到的麻煩。一個更好的辦法是,讓類自身負責保存它的唯一實例。這個類可 以保證沒有其他實例可以被創(chuàng)建(通過截取創(chuàng)建新對象的請求),并且它可以提供一個訪問該實例的方法。這就是Singleton模式:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。

      請看下面一段代碼,一個數據庫連接類:

      view plaincopy to clipboardprint?
      <?php   
      class DbConn {   
      // 私有靜態(tài)變量,保存DbConn類唯一實例   
      private static $instance;   
        
      // 私有的構造函數,防止用戶直接實例化DbConn類   
      private function __construct() {   
      // 這里初始化數據庫連接   
      }   
      // 公有的靜態(tài)方法,獲取DbConn類的唯一實例   
      public static function getInstance() {   
      if (!isset(self::$instance)) {   
      self::$instance = new DbConn();   
      }   
      return self::$instance;   
      }   
      // 私有的析構函數   
      private function __destruct() {   
      // 這里關閉數據庫連接   
      }   
      // 阻止用戶克隆DbConn類實例   
      public function __clone() {   
      trigger_error('不允許Clone.', E_USER_ERROR);   
      }   
      ?>  
      <?php
      class DbConn {
      // 私有靜態(tài)變量,保存DbConn類唯一實例
      private static $instance;

      // 私有的構造函數,防止用戶直接實例化DbConn類
      private function __construct() {
      // 這里初始化數據庫連接
      }
      // 公有的靜態(tài)方法,獲取DbConn類的唯一實例
      public static function getInstance() {
      if (!isset(self::$instance)) {
      self::$instance = new DbConn();
      }
      return self::$instance;
      }
      // 私有的析構函數
      private function __destruct() {
      // 這里關閉數據庫連接
      }
      // 阻止用戶克隆DbConn類實例
      public function __clone() {
      trigger_error('不允許Clone.', E_USER_ERROR);
      }
      ?>

      分析一下這段代碼,發(fā)現(xiàn)4個特征:
      1.一個私有的靜態(tài)屬性
      2.私有的構造、析構函數
      3.一個公有的靜態(tài)方法獲取類的唯一實例
      4.防止用戶克隆(__clone())類實例

      這就是Singleton模式的特征,一個非常高效實用的模式。

      下面一段代碼是測試例子。

      view plaincopy to clipboardprint?
      <?php   
      // 報錯   
      $test = new DbConn();   
      // OK   
      $test = DbConn::getInstance();   
      // 報錯   
      $test_clone = clone($test);   
      ?>

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多