PHP中有一些幾乎不會(huì)關(guān)注和關(guān)心的‘細(xì)枝末節(jié)’。
創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、祥云網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作、商城系統(tǒng)網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為祥云等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。如果你敢說你精通PHP,不了解這個(gè)系列就算不得什么精通。也就應(yīng)該繼續(xù)了解以下內(nèi)容。
第一篇 new self() 和 new static()
1 . new self()
self的用法有
1》引用類常量
class A{ const DATELINE = '20170101'; public function check_newyear(){ return (@date('Ymd') >= self::DATELINE); } } var_dump((new A)->check_newyear());//bool(true)2》引用類靜態(tài)方法
class A{ const DATELINE = '20170101'; public function check_newyear(){ return self::is_newyear(); } public static function is_newyear(){ return (@date('Ymd') >= self::DATELINE); } } var_dump((new A)->check_newyear());//bool(true)3》引用非靜態(tài)方法(不推薦)
class A{ const DATELINE = '20170101'; public function check_newyear(){ return self::is_newyear(); } public function is_newyear(){ return (@date('Ymd') >= self::DATELINE); } }self 完全等同于self所在 類名
self 完全可以用當(dāng)前類 類名 替代
class A{ const AGE = 1; public function test(){ return self::AGE; } } class B extends A{ const AGE = 2; } var_dump((new B)->test());//int(1) //-------------------------------- class A{ const AGE = 1; public function test(){ return self::AGE; } } class B extends A{ const AGE = 2; public function test(){ return self::AGE; } } var_dump((new B)->test());//int(2)以上倆段代碼可以驗(yàn)證這一點(diǎn)。
由此類推如下代碼就簡(jiǎn)單了:
class A{ public function instance(){ return new self(); } } var_dump((new A)->instance()); //可替代為 class A{ public function instance(){ return new A(); } } var_dump((new A)->instance());class A{ public function instance(){ return new self(); } } class B extends A{ public function instance(){ return new self(); } } var_dump((new B)->instance()); //可替代為 class A{ public function instance(){ return new A(); } } class B extends A{ public function instance(){ return new B(); } } var_dump((new B)->instance());2. new static()
static的用法
1》方法靜態(tài)變量
function f1(){ static $a; $a++; var_dump($a); } function f2(){ static $a; $a += 10; var_dump($a); } f1();//1 f1();//2 f1();//3 f2();//10 f2();//20 f2();//30方法里的靜態(tài)變量屬于方法,作用域也指向當(dāng)前方法。
2》類靜態(tài)屬性
class A{ public static $name = 'zhangsan'; public function test(){ return self::$name; } } var_dump((new A)->test());3》類靜態(tài)方法
class A{ public static $name = 'zhangsan'; public static function test(){ return self::$name; } } var_dump((new A)->test());附錯(cuò)誤例
//Error1 //$name 為非靜態(tài)變量 class A{ public $name = 'zhangsan'; public static function test(){ return self::$name; } } //Error2 //靜態(tài)方法內(nèi)存在$this class A{ public $name = 'zhangsan'; public static function test(){ return $this->name; } }而我們知道,靜態(tài)屬性屬于類本身,所以靜態(tài)對(duì)象也存在繼承。
class A{ public static $name = 'zhangsan'; public function test(){ return self::$name; } } class B extends A{ public function test(){ return self::$name; } } var_dump((new B)->test());//zhangsan在繼承中static是動(dòng)態(tài)的
class A{ public static $name = 'zhangsan'; public static function test(){ return self::$name; } public static function test1(){ return static::$name; } } class B extends A { public static $name = "lisi"; } var_dump(A::test1()); //zhangsan; var_dump(B::test1()); //lisi;其實(shí), static 是 self 的補(bǔ)充。
3 . new self() 和 new static() 的不同
class A{ public static $name = 'zhangsan'; public function test(){ return new self(); } public function test1(){ return new static(); } } class B extends A { } var_dump((new A)->test()); //A; var_dump((new A)->test1()); //A; var_dump((new B)->test()); //A; var_dump((new B)->test1()); //B;另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。