php物件導向中static 關鍵字的使用

來源:互聯網
上載者:User

    使用static關鍵字可以將類中的成員標識為靜態,既可 以用來標識成員屬性,也可以用來標識成員方法。普通成員作為對象屬性存在,以Person類為例,如果在Person中有一個"$conuntry = 'china'"的成員屬性,任何一個Person類的對象都會擁有自己的一份$country屬性,對象之間不會干擾。而static成員是作為整個類的屬性存在,如果將$country屬性使用static關鍵字標識,則不管通過Person類建立多少個對象(甚至可以是沒有對象),這個static成員總是唯一存在的,在多個對象之間共用的。因為使用static標識
的成員屬性是屬於類的,所以與對象執行個體和其他的類無關。類的靜態屬性非常類似於函數的全域變數。類中的靜態成員是不需要對象而使用類名來直接存取的,格式如下所示:

   類名::靜態成員屬性名;

   類名::靜態成員方法名()

  在類中聲明的成員方法中,也可以使用關鍵字"self"來訪問其他靜態成員。因為靜態成員是屬於類的,而不屬於任何對象,所以你不能用$this來引用它,而在PHP中給我們提供 的self關鍵字,就是在類的成員用來代表本類的關鍵字。格式如下 所示;

    self::靜態成員屬性名; //在類的成員方法中使用這種方式訪問本類中的靜態成員屬性

   self::靜態成員方法名();  //在類的成員方法中使用這種方式訪問本類中的靜態成員方法

  如果在類的外部存取類中的靜態成員,可以使用對象引用和使用類名訪問,但通常選擇用類名來訪問。如果在類內部的成員方法中訪問其他的靜態成員,通常使用self的形式去訪問,最好不要直接使用類名稱。在下面的例子中聲明一個Myclass類,為了讓類中的count屬性可以在每個對象中共用,將其聲明為static成員,用來統計通過Myclass類一共建立了多少對象。代碼如下所示:

  <?php
         class Myclass{
              static $count;
              function __contruct(){
                   self::$count++;
}

         static function getcount(){        

}

static function gecount()
      return self::$count;
}

}

Myclass::$count=0;
$myc1 = new Myclass();
$myc2 = new Myclass();

$myc3 = new Myclass();

echo Myclass::getCount();

echo $myc3->getCount();

  上例的Myclass類中,在構造方法內部和成員方法getCount()的內部,都使用self訪問本類中使用static標識為靜態屬性count,並在類的外部使用類名訪問類中的靜態屬性。可以看到同一個類中的靜態成員在每個對象中共用,每建立一個對象靜態屬性count就自增1.用來統計執行個體化對象的次數。

  另外在使用靜態方法時需要注意,在靜態方法中只能訪問靜態成員。因為非靜態成員必須通過對象的引用才能訪問,通常是使用$this完成的。而靜態方法在對象不存在的情況下也可以直接使用類名來訪問,沒有對象就沒$this引用,沒有了$this引用就不能訪問類中的非靜態成員,但是可以使用類名或self在非靜態方法中訪問靜態成員。

聯繫我們

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