PHP中怎么實(shí)現(xiàn)static::與new static的靜態(tài)綁定?針對這個(gè)問題,今天小編總結(jié)這篇有關(guān)靜態(tài)綁定的文章,希望能幫助更多想解決這個(gè)問題的朋友找到更加簡單易行的辦法。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、循化網(wǎng)站維護(hù)、網(wǎng)站推廣。一、parent、self、$this、__CLASS__
class A {} class B extends A{ parent::(public|protected)(靜態(tài)方法|靜態(tài)變量) ===> parent永遠(yuǎn)是A self::(public|protected)(靜態(tài)方法|靜態(tài)變量) ===> self永遠(yuǎn)是B $this->(public|protected)(非靜態(tài)方法|非靜態(tài)變量) ===> $this永遠(yuǎn)是B的是實(shí)例化對象 __CLASS__ ===> 永遠(yuǎn)是B } class C extends B{ parent::(public|protected)(靜態(tài)方法|靜態(tài)變量) ===> parent永遠(yuǎn)是B self::(public|protected)(靜態(tài)方法|靜態(tài)變量) ===> self永遠(yuǎn)是C $this->(public|protected)(非靜態(tài)方法|非靜態(tài)變量) ===> $this永遠(yuǎn)是C的是實(shí)例化對象 __CLASS__ ===> 永遠(yuǎn)是C }
二、static::
static關(guān)鍵字可以實(shí)現(xiàn)以下功能:
1 調(diào)用類的靜態(tài)方法 有后期靜態(tài)綁定效果;
2 調(diào)用類的靜態(tài)屬性 有后期靜態(tài)綁定效果;
3 調(diào)用類的非靜態(tài)方法 沒有后期靜態(tài)綁定效果;
4 注意:不可以調(diào)用非靜態(tài)屬性;
class A { private static function foo() { echo "A success!\n"; } public function test() { $this->foo(); } } class B extends A { } class C extends A { private static function foo() { echo "C success!\n"; } } $b = new B(); $b->test();//A success! $c = new C(); $c->test();//A success!
class A { private static function foo() { echo "A success!\n"; } public function test() { static::foo(); } } class B extends A { } class C extends A { private static function foo() { echo "C success!\n"; } } $b = new B(); $b->test();//A success! $c = new C(); $c->test();//A無法調(diào)用C里的私有foo方法 //將C的foo改成非private(public|protected)就可以解決 class A { private static function foo() { echo "A success!\n"; } public function test() { static::foo(); } } class B extends A { } class C extends A { public static function foo() { echo "C success!\n"; } } $b = new B(); $b->test();//A success! $c = new C(); $c->test();//C success!
class A { public static function foo() { static::who(); } public static function who() { echo __CLASS__."\n"; } } class B extends A { public static function test() { A::foo(); parent::foo(); self::foo(); } public static function who() { echo __CLASS__."\n"; } } class C extends B { public static function who() { echo __CLASS__."\n"; } } C::test(); A =>A::foo()的結(jié)果 C =>parent::foo()能走到A的foo,里面static::who找C::who C =>self::foo()能走到B的foo,B繼承A,走到A的foo,里面static::who找C::who class A { protected static function foo() { static::who(); } protected static function who() { echo __CLASS__."\n"; } } class B extends A { public static function test() { A::foo(); parent::foo(); self::foo(); } protected static function who() { echo __CLASS__."\n"; } } class C extends B { protected static function who() { echo __CLASS__."\n"; } } C::test(); //A C C,解釋同上 class A { public static function foo() { static::who(); } private static function who() { echo __CLASS__."\n"; } } class B extends A { public static function test() { A::foo(); parent::foo(); // self::foo(); } private static function who() { echo __CLASS__."\n"; } } class C extends B { private static function who() { echo __CLASS__."\n"; } } C::test(); //A =>A::foo()的結(jié)果 //報(bào)錯(cuò) A不可C的私有方法who => parent::foo()能走到A的foo,里面static::who找C::who,C的who只能在C里調(diào)用,不能在A里調(diào)用 //報(bào)錯(cuò) A不可C的私有方法who => self::foo()能走到B的foo,B繼承A,走到A的foo,里面static::who找C::who,C的who只能在C里調(diào)用,不能在A里調(diào)用
三、new static()
//new self()與new static()的區(qū)別,官網(wǎng)例子如下: 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_static()); // A
關(guān)于PHP中實(shí)現(xiàn)static::與new static的靜態(tài)綁定就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
文章名稱:PHP中怎么實(shí)現(xiàn)static::與newstatic的靜態(tài)綁定-創(chuàng)新互聯(lián)
URL標(biāo)題:http://vcdvsql.cn/article46/csspeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、面包屑導(dǎo)航、定制網(wǎng)站、服務(wù)器托管、品牌網(wǎng)站制作、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容