PHP強(qiáng)化之19 - 靜態(tài) Static

一、簡(jiǎn)介

static關(guān)鍵字用來(lái)定義靜態(tài)方法和屬性重荠,也可以用來(lái)定義靜態(tài)變量以及后期靜態(tài)綁定。

聲明類(lèi)屬性或方法為靜態(tài)珠漂,就可以不實(shí)例化類(lèi)而直接訪(fǎng)問(wèn)晚缩。靜態(tài)屬性不能通過(guò)一個(gè)類(lèi)已實(shí)例化的對(duì)象來(lái)訪(fǎng)問(wèn)(但靜態(tài)方法可以)。

二媳危、靜態(tài)方法和屬性

案例說(shuō)明:

class Foo{
    public static $my_static = 'foo';  //聲明靜態(tài)屬性
    public function staticFunc(){
        return self::$my_static;
    }
    static public function test(){
        return $this->$my_static;  //致使錯(cuò)誤荞彼,this 在靜態(tài)方法中不可用
    }

}

class UseFoo{
    static public function index(){
        $eof = "<br/>";

        echo Foo::$my_static,1,$eof; //靜態(tài)屬性的調(diào)用方式

        $foo = new Foo();
        echo $foo->staticFunc(),2,$eof;
        echo $foo->my_static,3,$eof; //報(bào)錯(cuò),因?yàn)椴荒苁褂?>方式調(diào)用靜態(tài)屬性
        echo $foo::$my_static,4,$eof;
    }
}

UseFoo::index(); //直接調(diào)用靜態(tài)方法

注意:
1)由于靜態(tài)方法不需要通過(guò)對(duì)象即可調(diào)用待笑,所以偽變量$this 在靜態(tài)方法中不可用鸣皂。
2)靜態(tài)屬性不可以由對(duì)象通過(guò)->操作符來(lái)訪(fǎng)問(wèn)。
3)靜態(tài)方法可以通過(guò)類(lèi)::方法名()的形式調(diào)用暮蹂,也可以通過(guò)$this->方法名()的形式寞缝。

三、使用靜態(tài)變量

變量范圍的另一個(gè)重要特性是靜態(tài)變量(static variable)仰泻。靜態(tài)變量?jī)H在局部函數(shù)域中存在荆陆,但當(dāng)程序執(zhí)行離開(kāi)此作用域時(shí),其值并不丟失集侯。

案例說(shuō)明:

function test($id)
{
  static $count=0;
  echo "{$id}=>count is :".$count."<br/>";
  $count++;  
}

test(1);
test(2);
test(3);

//結(jié)果如下:
1=>count is :0
2=>count is :1
3=>count is :2

注意:
1)靜態(tài)變量?jī)H初始化一次
2)每次執(zhí)行函數(shù)該值會(huì)保留
3)static修改的變量是局部的被啼,僅在函數(shù)內(nèi)部有效
4)可以用來(lái)記錄函數(shù)調(diào)用次數(shù),從而可以在某些條件下終止遞歸

四棠枉、后期靜態(tài)綁定

自 PHP 5.3.0 起浓体,PHP 增加了一個(gè)叫做后期靜態(tài)綁定的功能,用于在繼承范圍內(nèi)引用靜態(tài)調(diào)用的類(lèi)辈讶。

準(zhǔn)確說(shuō)命浴,后期靜態(tài)綁定工作原理是存儲(chǔ)了在上一個(gè)“非轉(zhuǎn)發(fā)調(diào)用”(non-forwarding call)的類(lèi)名。當(dāng)進(jìn)行靜態(tài)方法調(diào)用時(shí),該類(lèi)名即為明確指定的那個(gè)(通常在 :: 運(yùn)算符左側(cè)部分)生闲;當(dāng)進(jìn)行非靜態(tài)方法調(diào)用時(shí)媳溺,即為該對(duì)象所屬的類(lèi)。所謂的“轉(zhuǎn)發(fā)調(diào)用”(forwarding call)指的是通過(guò)以下幾種方式進(jìn)行的靜態(tài)調(diào)用:self::跪腹,parent::褂删,static:: 以及 forward_static_call()〕迦祝可用 get_called_class() 函數(shù)來(lái)得到被調(diào)用的方法所在的類(lèi)名屯阀,static:: 則指出了其范圍。

該功能從語(yǔ)言?xún)?nèi)部角度考慮被命名為“后期靜態(tài)綁定”轴术∧阉ィ“后期綁定”的意思是說(shuō),static:: 不再被解析為定義當(dāng)前方法所在的類(lèi)逗栽,而是在實(shí)際運(yùn)行時(shí)計(jì)算的盖袭。也可以稱(chēng)之為“靜態(tài)綁定”,因?yàn)樗梢杂糜冢ǖ幌抻冢╈o態(tài)方法的調(diào)用彼宠。

官方文檔: http://php.net/manual/zh/language.oop5.late-static-bindings.php

五鳄虱、經(jīng)典案例

1、寫(xiě)出如下程序的輸出結(jié)果

$count = 5;

function get_count(){
        static $count;
        return $count++;
}
echo $count,"\n\r";
++$count;

echo get_count(),"\n\r";
echo get_count(),"\n\r";

結(jié)果如下:

root@Chan:/var/www/html# php demo25.php 
5

1

結(jié)果分析:

參考

官方手冊(cè):
http://www.php.net/manual/zh/language.oop5.static.php

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凭峡,一起剝皮案震驚了整個(gè)濱河市拙已,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摧冀,老刑警劉巖倍踪,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異索昂,居然都是意外死亡建车,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)椒惨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缤至,“玉大人,你說(shuō)我怎么就攤上這事康谆∑啾” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵秉宿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我屯碴,道長(zhǎng)描睦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任导而,我火速辦了婚禮忱叭,結(jié)果婚禮上隔崎,老公的妹妹穿的比我還像新娘。我一直安慰自己韵丑,他們只是感情好爵卒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著撵彻,像睡著了一般钓株。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陌僵,一...
    開(kāi)封第一講書(shū)人閱讀 51,258評(píng)論 1 300
  • 那天轴合,我揣著相機(jī)與錄音,去河邊找鬼碗短。 笑死受葛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的偎谁。 我是一名探鬼主播总滩,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼巡雨!你這毒婦竟也來(lái)了闰渔?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鸯隅,失蹤者是張志新(化名)和其女友劉穎澜建,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蝌以,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炕舵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了跟畅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咽筋。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖徊件,靈堂內(nèi)的尸體忽然破棺而出奸攻,到底是詐尸還是另有隱情,我是刑警寧澤虱痕,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布睹耐,位于F島的核電站,受9級(jí)特大地震影響部翘,放射性物質(zhì)發(fā)生泄漏硝训。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窖梁。 院中可真熱鬧赘风,春花似錦、人聲如沸纵刘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)假哎。三九已至瞬捕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間位谋,已是汗流浹背山析。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掏父,地道東北人笋轨。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像赊淑,于是被迫代替她去往敵國(guó)和親爵政。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 前言 首先掺出,這個(gè) static 符號(hào)跟 static(靜態(tài))關(guān)鍵字不是一個(gè)東西。這三個(gè)符號(hào)在PHP對(duì)象中共有兩種用...
    七夜5757閱讀 1,125評(píng)論 0 2
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,098評(píng)論 1 32
  • 事物在一天天變化著,同樣人也在不斷的變動(dòng)著百框,舊的走了闲礼,新的又來(lái),周而復(fù)始铐维,沒(méi)有永遠(yuǎn)的相聚柬泽,也沒(méi)有永遠(yuǎn)的別離,反...
    半抹晴語(yǔ)詩(shī)閱讀 221評(píng)論 0 0
  • 一天又一天 青春來(lái)了 在匆忙著的光陰罅隙里 為偶然間的閑逸感到幸福 在白駒蒼狗的掠影里 為疲憊時(shí)流轉(zhuǎn)秋水的氤氳感動(dòng)...
    12ena1ssnace閱讀 184評(píng)論 0 0
  • 實(shí)干是個(gè)名詞,是指去掉水分的實(shí)有干物質(zhì)睬棚;實(shí)干又是形容詞琳疏,用來(lái)形容真實(shí)干出來(lái)的東西有决;實(shí)干還是副詞,表明實(shí)干的程度空盼;實(shí)...
    南山li閱讀 526評(píng)論 0 0