靜態方法裏不能使用$this標識調用靜態方法

# 概述函數

static關鍵字聲明一個屬性或方法是和類相關的,而不是和類的某個特定的實例相關,所以,這類屬性或方法也稱爲"類屬性"或"類方法"this


# 靜態屬性對象

靜態屬性不能夠由對象經過 -> 操做符來訪問。內存

 

 

# 靜態方法裏不能使用$this標識調用靜態方法io

靜態方法是屬於類的,被每一個類的實例所共享。因爲靜態方法不須要經過對象便可調用,因此僞變量 $this 在靜態方法中不可用。function

靜態方法隨着類的加載而加載,靜態方法是優先於對象而存在的。當咱們加載一個類的時候,對象尚未存在,而this表明的是對象的引用,試問當咱們加載類的時候對象都沒有,又怎麼可使用this呢?答案顯而易見class

this是指當前對象(至關於一個句柄),靜態方法是經過類調用的方法,不須要實例化,既然不須要實例化,就沒有當前對象,既然沒有當前對象,就不會有this變量

# 普通方法調用靜態方法引用

```
$this方法

self

parent

```


# 靜態方法調動成員


靜態方法不能調用非靜態屬性 。不能使用self::調用非靜態屬性。


可是能夠調用不含$this標識的非靜態方法。


````

// 實現最大值比較的Math類。     
class Math   
{         
    public function Max($num1, $num2) {            
        return $num1 > $num2 ? $num1 : $num2;     
    }     
    public static function Max3($num1, $num2, $num3) {     
        $num1 = self::Max($num1, $num2);     
        $num2 = self::Max($num2, $num3);     
        $num1 = self::Max($num1, $num2);             
        return $num1;     
    }     
}  

```

> 當一個類中有非靜態方法被self:: 調用時,系統會自動將這個方法轉換爲靜態方法。

# 總結:

在PHP中 全部全局變量都存儲於靜態內存區(但他們並非靜態變量)。

普通局部變量,一旦函數執行完畢就銷燬,可是靜態變量不會(局部變量,離開函數後就銷燬了)。

靜態類屬性就更牛了,不光不會銷燬,還能夠被其餘局部環境所調用。(靜態變量雖然沒有銷燬,可是隻能在定義它的函數內使用)

相關文章
相關標籤/搜索