這裡分析了php物件導向中static靜態屬性和靜態方法的呼叫。關於它們的調用(能不能調用,怎麼樣調用),需要弄清楚了他們在內存中存放位置,這樣就非常容易理解了。靜態屬性、方法(包括靜態與非靜態)在記憶體中,只有一個位置(而非靜態屬性,有多少實例化對象,就有多少個屬性)。
實例:
?
1
2 9101112 131415161718191
header ("content-type:text/html;charset=utf-8");
classHuman{
|
static public
public $height = 180 ;
staticpublic function tell(){
tell(){ //靜態方法呼叫靜態屬性,使用self關鍵字
//echo $this->height;//錯誤。靜態方法不能呼叫非靜態屬性
//因為 $this代表實例化對象,而這裡是類,不知道 $this 代表哪個對象
}
public
function say(){
echo " ;
//普通方法呼叫靜態屬性,同樣使用self關鍵字
echo$this ->height;
}
}
$p1 = new Human(); new Human();
$p1 ->tell();
//物件可以存取靜態方法
echo $p1 ::
$name ; //物件存取靜態屬性。不能這麼訪問$p1->name
//因為靜態屬性的記憶體位置不在物件裡
Human::say(); //錯。 say()方法有$this時出錯;沒有$this時能出結果
//但php5.4以上會提示
?>
結論:1、靜態屬性的 靜態方法可以呼叫非靜態方法,使用self 關鍵字。 php裡,一個方法被self:: 後,它就自動轉變成靜態方法;
3、靜態方法不能呼叫非靜態屬性。因為非靜態屬性需要實例化後,就存放在物件裡;
以上就介紹了php物件導向中static靜態屬性和靜態方法的調用,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。
|