這篇文章給大家分享的是有關(guān)PHP面向?qū)ο笾衝ew self( )和 new static( ) 的區(qū)別有哪些的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。
成都創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)玉泉,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792
首先闡明結(jié)論,在PHP中 self指向定義了當(dāng)前被調(diào)用方法的類(lèi), static指向調(diào)用當(dāng)前靜態(tài)方法的類(lèi)。
接下來(lái)通過(guò)一個(gè)例子來(lái)證明上面的結(jié)果
class A { public static $_a = 'Class A'; public static function echoProperty() { echo self::$_a . PHP_EOL; } } class B extends A { public static $_a = 'Class B'; } $obj = new B(); B::echoProperty();//輸出 Class A
之所以會(huì)這樣是因?yàn)槭褂胹elf:: 或者_(dá)_CLASS__對(duì)當(dāng)前類(lèi)的靜態(tài)引用,取決于定義被調(diào)用方法所在的類(lèi),將上面Class A的方法echoProperty做一下修改變成:
class A { public static $_a = 'Class A'; public static function echoProperty() { echo static::$_a . PHP_EOL; } } //再次調(diào)用B::echoProperty將輸出 'CLASS B'
為了避免上面第一個(gè)例子中看到的子類(lèi)重寫(xiě)父類(lèi)的靜態(tài)屬性后,使用繼承來(lái)的方法仍然訪問(wèn)父類(lèi)的靜態(tài)屬性, PHP5.3增加了一個(gè)新的語(yǔ)法:后期靜態(tài)綁定(Late static binding), 使用static關(guān)鍵字替代self關(guān)鍵字,使得static指向與get_called_class()返回的相同的類(lèi),即當(dāng)前調(diào)用靜態(tài)方法的類(lèi), 該關(guān)鍵字對(duì)于靜態(tài)方法的訪問(wèn)同樣有效。
下面的例子更好的說(shuō)明了new self()和new static()之間的差異(后者使用了PHP的后期靜態(tài)綁定指向調(diào)用方法的當(dāng)前類(lèi))
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {} echo get_class(B::get_self()); // A echo get_class(B::get_static()); // B echo get_class(A::get_self()); // A echo get_class(A::get_static()); // A
感謝各位的閱讀!關(guān)于PHP面向?qū)ο笾衝ew self( )和 new static( ) 的區(qū)別有哪些就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!