php中static靜態類與static 靜態變數用法區別

來源:互聯網
上載者:User

標籤:bsp   function   self   錯誤   例子   子類   att   code   注意   

1. 建立對象$object = new Class(),然後使用”->”調用:$object->attribute/function,前提是該變數/方法可訪問。 
2. 直接調用類方法/變數:class::attribute/function,無論是靜態/非靜態都可以。但是有前提條件: 
A. 如果是變數,需要該變數可訪問。 
B. 如果是方法,除了該方法可訪問外,還需要滿足: 
b1) 如果是靜態方法,沒有特殊條件; 
b2) 如果是非靜態方法,需要改方法中沒有使用$this,即沒有調用非靜態變數/方法,當然,調用靜態變數/方法沒有問題。

然後我們再看一下使用$object->… 和使用class::… 都有什麼區別: 
1. 使用$object->… ,需要執行建構函式建立對象; 
2. 使用class::… 調用靜態方法/變數,不需要執行建構函式建立對象; 
3. 使用class::… 調用非靜態方法/變數,也不需要執行建構函式建立對象。

然後奇怪的地方就出來了,既然2和3都一樣,那靜態方法/變數存在還有什麼意義呢? 
靜態 static
聲明類成員或方法為 static ,就可以不執行個體化類而直接存取,不能通過一個對象來訪問其中的靜態成員(靜態方法除外)。靜態成員屬於類,不屬於任何對象執行個體,但類的對象執行個體都能共用。

例子:

<?phpClass Person{    // 定義靜態成員屬性    public static $country = "中國";    // 定義靜態成員方法    public static function myCountry() {        // 內部訪問靜態成員屬性        echo "我是".self::$country."人<br />";    }}class Student extends Person {    function study() {        echo "我是". parent::$country."人<br />";    }}// 輸出成員屬性值echo Person::$country."<br />";  // 輸出:中國$p1 = new Person();//echo $p1->country;   // 錯誤寫法// 訪問靜態成員方法Person::myCountry();   // 輸出:我是中國人// 靜態方法也可通過對象訪問:$p1->myCountry();// 子類中輸出成員屬性值echo Student::$country."<br />"; // 輸出:中國$t1 = new Student();$t1->study();    // 輸出:我是中國人?>

運行該例子,輸出:

中國
我是中國人
我是中國人
中國
我是中國人
小結
在類內部訪問靜態成員屬性或者方法,使用 self::(注意不是 $slef),如:

slef:: $countryslef:: myCountry()

在子類訪問父類靜態成員屬性或方法,使用 parent::(注意不是 $parent),如:

parent:: $countryparent:: myCountry()

 

外部存取靜態成員屬性和方法為 類名/子類名:: ,如:

Person::$countryPerson::myCountry()Student::$country

但靜態方法也可以通過普通對象的方式訪問

 

php中static靜態類與static 靜態變數用法區別

聯繫我們

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