PHP靜態方法與非靜態方法用法及區別

1、用static關鍵字來修飾類的屬性、方法,稱這些屬性、方法爲靜態屬性、靜態方法;
static關鍵字聲明一個屬性或方法是和類相關的,而不是和類的某個特定的實例相關,因此,這類屬性或方法也稱爲"類屬性"或"類方法"。靜態類不是不可以實例化,而是不需要實例化就可以用。

2、設計靜態方法的目的是爲了不用實例化對象直接用類名快速調用。

3、static 的屬性和方法,只能訪問static的屬性和方法,不能類訪問非靜態的屬性和方法。因爲靜態屬性和方法被創建時,可能還沒有任何這個類的實例可以被調用。

4、非靜態方法可以訪問類中的任何成員(包括靜態),變量名||方法名前面不需要加上$。訪問靜態屬性和方法,使用self::方法||屬性

5、static內部只能出現static變量和其他static方法(即靜態方法不能調用非靜態屬性 。也不能使用self::調用非靜態屬性)!而且static方法中還不能使用this等關鍵字,因爲它是屬於整個類。靜態方法內部調用其他靜態方法,可以使用self::方法名稱的形式來實現;使用self:: 靜態變量名訪問當前類的靜態成員,變量名前面需要加上$,方法名前面不需要加上$

6、靜態方法中,$this僞變量不允許使用,可以使用self,parent在內部調用靜態方法與屬性。

7、一個類的所有實例,共用類中的靜態屬性。也就是這個屬性對於這個類來說是唯一的,不管實例化了多少個對象,只要它引用了一個靜態對象,那麼這些對象引用出來的值肯定是同一個。

class User{
    private static $count = 0;

    public function __construct(){
        self::$count +=1;
    }
    public function getCount(){
        return self::$count;
    }

}
    $user1 = new User();
    $user2 = new User();
    $user3 = new User();
    echo $user1->getCount();  //3

8、聲明定義一個靜態函數很簡單,它只需要在function前面加一個static關鍵字就可以了。
調用靜態方法可以使用 “類名::靜態函數名”的格式去調用,也可以直接實例化一個變量,然後使用變量名->函數名的方法調用。
由於靜態方法不需要類的實例化就能夠被調用,而普通方法和普通屬性都必須先聲明一個對象纔可以訪問,因此,在靜態方法裏面始終是不能使用普通方法和訪問普通變量的。
關於靜態方法要牢牢記住一點:“靜態方法是屬於整個類的。”

class Star{
    public static function getName($name){
        return '隊員姓名'.$name;
    }
}
echo Star::getName('kate');  //隊員姓名kate
$star = new Star();
echo $star->getName('jim');  //隊員姓名jim
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章