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