PHP中new static() 和 new self() 的區(qū)別介紹
長(zhǎng)夜漫漫??!
今天領(lǐng)導(dǎo)本地搭建一個(gè)站。發(fā)現(xiàn)用PHP 5.2 搭建不起來(lái),站PHP代碼里面有很多5.3以上的部分,領(lǐng)導(dǎo)讓苦逼我更改在5.2下能運(yùn)行。
改著改著發(fā)現(xiàn)了一個(gè)地方
return new static($val);
這尼瑪是神馬,只見過(guò)
return new self($val);
于是上網(wǎng)查了下,他們兩個(gè)的區(qū)別。
self – 就是這個(gè)類,是代碼段里面的這個(gè)類。
static – PHP 5.3加進(jìn)來(lái)的只得是當(dāng)前這個(gè)類,有點(diǎn)像$this的意思,從堆內(nèi)存中提取出來(lái),訪問(wèn)的是當(dāng)前實(shí)例化的那個(gè)類,那么 static 代表的就是那個(gè)類。
還是看看老外的專業(yè)解釋吧。
self refers to the same class whose method the new operation takes place in.
static in PHP 5.3's late static bindings refers to whatever class in the hierarchy which you call the method on.
In the following example, B inherits both methods from A. self is bound to A because it's defined in A‘s implementation of the first method, whereas static is bound to the called class (also see get_called_class() ).
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
這個(gè)例子基本上一看就懂了吧。
原理了解了,但是問(wèn)題還沒(méi)有解決,如何解決掉 return new static($val); 這個(gè)問(wèn)題呢?
其實(shí)也簡(jiǎn)單就是用 get_class($this); 如下
class A {
public function create1() {
$class = get_class($this);
return new $class();
}
public function create2() {
return new static();
}
}
class B extends A {
}
$b = new B();
var_dump(get_class($b->create1()), get_class($b->create2()));
/*
The result
string(1) "B"
string(1) "B"
*/
- PHP中new static()與new self()的區(qū)別異同分析
- php self,$this,const,static,->的使用
- php類中的$this,static,final,const,self這幾個(gè)關(guān)鍵字使用方法
- PHP中static關(guān)鍵字以及與self關(guān)鍵字的區(qū)別
- PHP new static 和 new self詳解
- PHP面向?qū)ο笾衝ew self()與 new static()的區(qū)別淺析
- 淺談PHP中new self()和new static()的區(qū)別
- php類中static與self的使用區(qū)別淺析
相關(guān)文章
PHP開發(fā)工具ZendStudio下Xdebug工具使用說(shuō)明詳解
我使用的是XAMPP的集成開發(fā)平臺(tái)環(huán)境。里面已經(jīng)預(yù)設(shè)了Xdebug的調(diào)試工具,只需要自己改下配置的就可以了2013-11-11php實(shí)現(xiàn)遍歷目錄并刪除指定文件中指定內(nèi)容
這篇文章主要介紹了php實(shí)現(xiàn)遍歷目錄并刪除指定文件中指定內(nèi)容,本文實(shí)現(xiàn)的工具可以用來(lái)刪除服務(wù)器上的一句話木馬,需要的朋友可以參考下2015-01-01php常用數(shù)組array函數(shù)實(shí)例總結(jié)【賦值,拆分,合并,計(jì)算,添加,刪除,查詢,判斷,排序】
這篇文章主要介紹了php常用數(shù)組array函數(shù),結(jié)合實(shí)例形式總結(jié)分析了php常用的數(shù)組操作函數(shù),包括數(shù)組的賦值、拆分、合并、計(jì)算、添加、刪除、查詢、判斷、排序等,需要的朋友可以參考下2016-12-12php 從數(shù)據(jù)庫(kù)提取二進(jìn)制圖片的處理代碼
形式上類似UCH 只是存儲(chǔ)方式不一樣 本人比較愚鈍 這個(gè)問(wèn)題困惑了我半天 希望對(duì)有同樣問(wèn)題的phper有所幫助 高手們別見笑!2009-09-09JS(jQuery)實(shí)現(xiàn)聊天接收到消息語(yǔ)言自動(dòng)提醒功能詳解【提示“您有新的消息請(qǐng)注意查收”】
這篇文章主要介紹了JS(jQuery)實(shí)現(xiàn)聊天接收到消息語(yǔ)言自動(dòng)提醒功能,結(jié)合實(shí)例形式詳細(xì)分析了javascript結(jié)合ajax后臺(tái)交互實(shí)現(xiàn)信息語(yǔ)音提示功能相關(guān)原理與操作技巧,需要的朋友可以參考下2019-04-04