<?php Class Person{ public static $country = "中國";// 定義靜態成員屬性 public $countries = "zhongguo"; //非靜態類成員 public $mingzi = array();//非靜態類成員 // 定義靜態成員方法 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->countries. "<br>"; //調用輸出靜態成員變量 $p1->mingzi = array("liming"); //調用靜態成員數組 echo $p1->mingzi[0]; //輸出靜態成員數組中的元素 Person::myCountry(); // 輸出:我是中國人 $p1->myCountry(); //調用靜態成員方法 echo Student::$country."<br />"; // 調用子類 輸出:中國 $t1 = new Student(); // 實例化子類 $t1->study(); // 調用子類中的方法輸出:我是中國人 ?> <html> <head> <meta Content-Type="content-type:text/plain" charset="utf-8"> </head> </html>
輸出結果:
中國
zhongguo
liming我是中國人
我是中國人
中國
我是中國人
public的變量可以如果沒有static是可以實例化調用的調用,如果有static,就不能實例化調用。如:
正確的寫法:
<?php class myclass{ public static $name="amos"; } class myclass1{ public $mingzi="amos"; } echo myclass::$name; $p2=new myclass1(); echo $p2->mingzi; ?> <html> <head> <meta Content-Type="content-type:text/plain" charset="utf-8"> </head> </html>
錯誤的寫法:
<?php class myclass{ public static $name="amos"; } class myclass1{ public $mingzi="amos"; } $p1=new myclass(); echo $p1->name; echo myclass1::$mingzi; ?> <html> <head> <meta Content-Type="content-type:text/plain" charset="utf-8"> </head> </html>
爲什麼要聲明static類型的成員和方法?
聲明類成員或方法爲static,就可以不實例化類而直接訪問。
如何實例化?
$var= new classname();