在php中,通過static關(guān)鍵字修飾的成員方法被稱為靜態(tài)方法,靜態(tài)方法的內(nèi)存空間是固定的,只能訪問類中的靜態(tài)成員,可以通過“類名::靜態(tài)方法()”語句訪問靜態(tài)方法。
本教程操作環(huán)境:windows7系統(tǒng)、PHP7.1版、DELL G3電腦
在 PHP 中,通過 static 關(guān)鍵字修飾的成員屬性和成員方法被稱為靜態(tài)屬性和靜態(tài)方法,這里可以將它們統(tǒng)稱為靜態(tài)成員,類中的靜態(tài)成員與類中的一般成員不同,靜態(tài)成員不會被實例化到對象中,也就是說我們不需要實例化一個類,就可以通過類來訪問靜態(tài)成員。
在類中聲明靜態(tài)變量很容易,我們可以在類的普通成員前加一個 static 關(guān)鍵字,就可以將這個普通成員變成靜態(tài)成員了。這樣一來,我們可以在不實例化類的情況下,直接訪問類中的這些靜態(tài)成員。訪問靜態(tài)成員的語法格式如下:
類名::$靜態(tài)屬性 類名::靜態(tài)方法()
其中::
符號被稱為范圍解析操作符,用于訪問靜態(tài)成員、靜態(tài)方法和常量,還可以用于覆蓋類中的成員和方法。
如果要在類內(nèi)部的成員方法中訪問靜態(tài)屬性,只要在靜態(tài)屬性的名稱前加上操作符self::
即可。
靜態(tài)方法
-
靜態(tài)方法的內(nèi)存空間是固定的,相對來說更省資源。
-
創(chuàng)實例的創(chuàng)一個實例就要開辟一個新內(nèi)存,耗費資源 靜態(tài)方法屬于類所有,類實例化前即可使用;
-
靜態(tài)方法只能訪問類中的靜態(tài)成員;
-
static內(nèi)部只能出現(xiàn)static變量和其他static方法!而且static方法中還不能使用this等關(guān)鍵字,因為它是屬于整個類;
-
靜態(tài)方法和靜態(tài)變量創(chuàng)建后始終使用同一塊內(nèi)存,而使用實例的方式會創(chuàng)建多個內(nèi)存。
靜態(tài)方法的優(yōu)點:
(1)在代碼的任何地方都可以用(假設(shè)可以訪問該類);
(2)類的每個實例都可以訪問類中定義的靜態(tài)屬性,可以利用靜態(tài)屬性來設(shè)置值,該值可以被類的所有對象使用;
(3)不需要實例對象就能訪問靜態(tài)屬性或方法。
靜態(tài)方法和普通方法的區(qū)別
-
靜態(tài)方法在創(chuàng)建對象前就可以使用了,非靜態(tài)方法必須通過new出來的對象調(diào)用。
-
靜態(tài)方法可以通過 類名::方法名直接調(diào)用。普通方法需要創(chuàng)建一個實例,也就是new一個對象,然后通過 對象名->方法名的方式來調(diào)用 靜態(tài)類只能包含靜態(tài)成員,否則會拋出編譯錯誤;
-
非靜態(tài)類既可以包含非靜態(tài)成員也可以包含靜態(tài)成員 靜態(tài)類是不能實例化,之所以不能實例化,是因為靜態(tài)類會導(dǎo)致C#編譯器將該類同時標(biāo)記為abstract和sealed,并且編譯器不會在類型中 生成一個實例的構(gòu)造函數(shù),從而導(dǎo)致靜態(tài)類不能實例化;
-
非靜態(tài)類可以,并且靜態(tài)成員的訪問只能通過類來進(jìn)行訪問,因為靜態(tài)成員是屬于類的。
推薦學(xué)習(xí):《PHP視頻教程》