佳麗斯 加厚雙人/單人秋冬被子暖冬 羊毛被芯羊毛柔絲被特價包郵 憂憂魚冬外穿打底褲女秋冬厚長褲女褲加絨加厚高腰彈力鉛筆褲靴褲 韓國代購2013新款 韓版秋冬休閑女時尚磨破口袋衛衣韓版學生裝 潮

          有時,退一步,能一口氣進幾步,只是這先退一步需要勇氣和自信。

          用心愛你,努力工作。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            70 隨筆 :: 1 文章 :: 33 評論 :: 0 Trackbacks

          單例模式 有以下的特點:

          1. 單例類只能有一個實例。
          2. 單例類必須自己創建自己的唯一的實例。
          3. 單例類必須給所有其他對象提供這一實例。

          代碼:

          Singleton.php :

          <?php
          class Singleton
          {
              private static $instance;

              private function __construct()
              {
              }

              public static function getInstance()
              {
                  if(self::$instance == null)
                  {
                      self::$instance = new Singleton();
                  }

                  return self::$instance;
              }
          }
          ?>

          在使用的時候,因為構造方法是private(私有)的,所以是不能直接實例化的,必須使用類似下面的方法:

          例子:

          <?php
          require_once('Singleton.php ');

          $instance = Singleton::getInstance();
          ?>

          ============================================

          其它關于靜態的說明

          靜態成員.
          他在類被聲明時就產生了,也就是在程序編譯階段產生的,它只有一個所有該類實例共享的原本,任何該類實例更改靜態變量的值后,其它該類實例再去訪問該靜態變量,其值已經變成更改后的值,因為其在內存,就存一個原本。
          非靜態成員是在類實例化時產生的,你new一個該類實例,系統就會為該類實例的所有非靜態成員新開辟一個空間,每個實例都只能自己的非靜態成員。(有多少個類的實例,就要開辟多少個非靜態成員的空間)

          單例類全局只有一個實例,你可以把它看成全局對象。

          從底層來說,編譯完成后主要是兩個部分,一是CPU指令,這一部分包含各種方法;二是數據,也就是程序定義的各種類型的變量。運行程序實例化一個對象時,按如下方式分配內存:
          1。在程序啟動時將靜態數據和靜態方法放入堆內存中。
          2。第一次實例化對象時將其它方法放入代碼段中。
          3。每次實例化對象時將其它數據放入棧內存中。
          實例化同一個對象時,上述1、2項不動,只是再加一個第3項即可。銷毀一個實例的時候,如果還有其它的實例存在,就只釋放該實例的棧數據段(上述第3項)。

          根據以上原理回答您的問題
          靜態方法和數據一般都是Public型的,用于類的極普遍的事物處理,可以在程序的任意地方調用,在整過程序運行過程中始終占用計算機內存,一搬少用。如果一個程序中的各個對象都用一個數據庫的話,可以使用靜態方法連接。

          單件模式的實例銷毀時可以釋放所有的非靜態方法和數據,,如果把這個類的所有方法都設計為靜態的,這些方法將一直占用內存,浪費資源,不可取。

          在new一個對象時,只是加一個數據段,并不重新加載方法和靜態變量。

          最后說一個變量傳送的問題,網上很多朋友在回答類之間參數傳遞時都說用靜態變量,我認為這種方法不好,本來加類的目的就是為了封裝,如果用一個類似于全局變量的靜態變量作為參數就大大削弱了封裝的意義。

          實際上,系統和應用程序對內存的管理相當復雜.
          =======================下面摘自思歸的文字

          從表面上看,靜態(static)成員可以通過 類名.成員名 來直接調用,而實例(instance)成員需要生成一個對象后才能調用。同一個操作,性能當然靜態成員好

          但其實區別是跟對象設計有關的,一般來說實例成員跟實例的狀態有關,某個方法的調用可能需要訪問當前對象的狀態,并改變其狀態,從而影響其他方法的結果

          而靜態成員是跟類本身有關,與單獨的實例狀態無關。但靜態成員不要太多了,否則就淪為以前的procedural programming風格了,也許對象需要重新設計或重構。

          靜態成員往往會在多線程下操作,需要做同步化控制

          posted on 2008-11-15 17:52 王生生 閱讀(537) 評論(0)  編輯  收藏 所屬分類: PHP
          森露2013新款豹紋打底衫 高領 女 長袖 修身長袖t恤女 加絨加厚冬 2013春秋新款女裝 潮修身大碼長袖小西裝外套女 韓版中長款小西裝 憂憂魚2013秋冬新款直筒褲女顯瘦長褲加絨黑色休閑褲修身西褲女褲
          主站蜘蛛池模板: 嘉兴市| 独山县| 息烽县| 泉州市| 龙口市| 三台县| 岚皋县| 麻城市| 诏安县| 九江市| 赣榆县| 香港| 洞口县| 凤山县| 永丰县| 蓝田县| 兴安县| 塔河县| 丰宁| 沛县| 安阳县| 平凉市| 大余县| 尉氏县| 黄龙县| 无极县| 桓台县| 合肥市| 蓝山县| 思茅市| 察隅县| 广宗县| 呼伦贝尔市| 冷水江市| 平武县| 新蔡县| 长兴县| 镇沅| 湘潭市| 莆田市| 资讯 |