第4章:高級(jí)功能

您已經(jīng)了解了類類型提示和訪問控制如何使您更好地控制類的接口。在本章中巨朦,我將更深入地研究PHP的面向?qū)ο蠊δ堋?br> 本章將涉及幾個(gè)主題:
?靜態(tài)方法和屬性:通過類訪問數(shù)據(jù)和功能而不是對(duì)象
?抽象類和接口:將設(shè)計(jì)與實(shí)現(xiàn)分開
?特性:在類層次結(jié)構(gòu)之間共享實(shí)現(xiàn)
?錯(cuò)誤處理:引入異常
?最后的類和方法:限制繼承?攔截器方法:自動(dòng)委派
?析構(gòu)方法:清理對(duì)象后?克隆對(duì)象:制作對(duì)象副本
?將對(duì)象解析為字符串:創(chuàng)建摘要方法
?回調(diào):向具有匿名功能和類

靜態(tài)方法和屬性

上一章中的所有示例都適用于對(duì)象。我將類定義為模板產(chǎn)生了哪些對(duì)象剑令,以及哪些對(duì)象作為類的活動(dòng)實(shí)例(您使用其方法的事物)調(diào)用以及您訪問其屬性糊啡。我暗示,在面向?qū)ο蟮木幊讨杏踅颍嬲墓ぷ魇怯深惖膶?shí)例完成棚蓄。畢竟,類僅僅是對(duì)象的模板。
實(shí)際上梭依,它不是那么簡單稍算。您可以在類的上下文中訪問方法和屬性,而不是比物體的 此類方法和屬性是“靜態(tài)”的睛挚,必須使用靜態(tài)關(guān)鍵字

// listing 04.01
class StaticExample
{
    static public $aNum = 0;

    public static function sayHello()
    {
        print "hello";
    }
}

靜態(tài)方法是具有類范圍的函數(shù)邪蛔。他們本身不能訪問任何常規(guī)屬性該類,因?yàn)樗鼈儗儆谝粋€(gè)對(duì)象扎狱;但是侧到,他們可以訪問靜態(tài)屬性。如果你改變一個(gè)靜態(tài)屬性淤击,該類的所有實(shí)例都可以訪問新值
由于您是通過類而非實(shí)例訪問靜態(tài)元素的匠抗,因此不需要使用引用一個(gè)對(duì)象。而是污抬,將類名與::結(jié)合使用汞贸,如本例所示

print StaticExample::$aNum;
StaticExample::sayHello();

結(jié)果:0hello
上一章應(yīng)該熟悉此語法。我與父母一起使用::覆蓋的方法∮』現(xiàn)在矢腻,和那時(shí)一樣,我正在訪問類而不是對(duì)象數(shù)據(jù)射赛。類代碼可以使用parent關(guān)鍵字可訪問超類而不使用其類名多柑。訪問靜態(tài)方法或?qū)傩栽谕粋€(gè)類(而不是孩子)中,我將使用self關(guān)鍵字楣责。之前的$ this偽變量是對(duì)象竣灌。因此,從StaticExample類之外秆麸,我訪問$ aNum屬性使用其類名:

StaticExample::$aNum;

在StaticExample類中初嘹,我可以使用self關(guān)鍵字

// listing 04.02
class StaticExample
{
    static public $aNum = 0;

    public static function sayHello()
    {
        self::$aNum++;
        print "hello (" . self::$aNum . ")\n";
    }
}

注意使用父對(duì)象進(jìn)行方法調(diào)用是唯一應(yīng)使用靜態(tài)方法的情況 引用非靜態(tài)方法

除非您要訪問重寫的方法,否則應(yīng)僅使用::訪問方法或?qū)傩砸呀?jīng)明確聲明為靜態(tài)
但是沮趣,在文檔中屯烦,您經(jīng)常會(huì)看到用于引用方法或?qū)傩缘撵o態(tài)語法。這確實(shí)這并不意味著所討論的項(xiàng)目必定是靜態(tài)的兔毒,只是它屬于某個(gè)類別漫贞。在寫()ShopProductWriter類的方法可以稱為ShopProductWriter :: write(),例如育叁,即使write()方法不是靜態(tài)的迅脐。當(dāng)該特定級(jí)別為時(shí),您將在此處看到此語法適當(dāng)豪嗽。

// listing 04.02
class StaticExample
{
    static public $aNum = 0;
    public $an = 9;

    public function sayHello()
    {
        self::$aNum++;
        print "hello (" . self::$aNum . ")\n";
    }
}
print StaticExample::$aNum;
StaticExample::sayHello();
StaticExample::sayHello();

$new=new StaticExample();
echo $new->sayHello();
$new=new StaticExample();
echo $new->sayHello();

根據(jù)定義谴蔑,靜態(tài)方法和屬性是在類而非對(duì)象上調(diào)用的豌骏。為此原因,它們通常被稱為類變量和屬性隐锭。由于這種課堂取向窃躲,您不能在靜態(tài)方法中使用$ this偽變量

那么,為什么要使用靜態(tài)方法或?qū)傩郧账快o態(tài)元素具有許多特征這可能是有用的蒂窒。首先,它們可從腳本中的任何位置使用(假設(shè)您有權(quán)訪問班級(jí))荞怒。這意味著您可以訪問功能洒琢,而無需傳遞來自的類的實(shí)例。對(duì)象到對(duì)象褐桌,或者更糟的是衰抑,將實(shí)例存儲(chǔ)在全局變量中。其次荧嵌,靜態(tài)屬性可用于類的每個(gè)實(shí)例呛踊,因此您可以設(shè)置想要供類型的所有成員使用的值。最后啦撮,您不需要實(shí)例來訪問靜態(tài)屬性或方法的事實(shí)可以使您免于實(shí)例化純粹是為了獲得簡單功能的對(duì)象

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谭网,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赃春,更是在濱河造成了極大的恐慌蜻底,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聘鳞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡要拂,警方通過查閱死者的電腦和手機(jī)抠璃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脱惰,“玉大人搏嗡,你說我怎么就攤上這事±唬” “怎么了采盒?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蔚润。 經(jīng)常有香客問我磅氨,道長,這世上最難降的妖魔是什么嫡纠? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任烦租,我火速辦了婚禮延赌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叉橱。我一直安慰自己挫以,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布窃祝。 她就那樣靜靜地躺著掐松,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粪小。 梳的紋絲不亂的頭發(fā)上大磺,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音糕再,去河邊找鬼量没。 笑死,一個(gè)胖子當(dāng)著我的面吹牛突想,可吹牛的內(nèi)容都是我干的殴蹄。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼猾担,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼袭灯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绑嘹,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤稽荧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后工腋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姨丈,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年擅腰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蟋恬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趁冈,死狀恐怖歼争,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渗勘,我是刑警寧澤沐绒,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站旺坠,受9級(jí)特大地震影響乔遮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜取刃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一申眼、第九天 我趴在偏房一處隱蔽的房頂上張望瞒津。 院中可真熱鬧,春花似錦括尸、人聲如沸巷蚪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屁柏。三九已至,卻和暖如春有送,著一層夾襖步出監(jiān)牢的瞬間淌喻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工雀摘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裸删,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓阵赠,卻偏偏與公主長得像涯塔,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子清蚀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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