一、php中this、self、parent的區別之一
物件導向程式設計(oop,object oriented programming)現已經成為程式設計人員的一項基本技能。利用oop的思想進行php的高階程式設計,對於提高php程式設計能力和規劃web開發構架都是很有意義的。
php5經過重寫後,對oop的支援額有了很大的飛躍,成為了具備了大部分物件導向語言的特性的語言,比php4有了很多的物件導向的特性。這裡我 主要談的是 this,self,parent 三個關鍵字之間的區別。從字面上來理解,分別是指 這、自己、父親。先初步解釋一下,this是指向當前物件的指標(可以看成c裡面的指標),self是指向當前類的指標,parent是指向父類的指標。 我們這裡頻繁使用指標來描述,是因為沒有更好的語言來表達。關於指標的概念,大家可以去參考百科。
下面我們就根據實際的例子結合來講講。
<?php
class name //建立了乙個名為name的類
//析構函式
function __destruct()
//列印使用者名稱成員函式
function printname() }
this->name ); //再次使用了this指標語句②,也可以使用echo輸出 } }
obj1 = new name( 「pbphome」 ); //例項化物件 語句③
//執行列印
$obj1->printname(); //輸出: pbphome
echo 「
」; //輸出:回車
//第二次例項化物件ob
j2=n
ewna
me(「
php」
);//
執行列印
obj2=newname(「php」);//執行列印
obj2->printname(); //輸出:php
?>
說明:上面的類分別在 語句①和語句②使用了this指標,那麼當時this是指向誰呢?其實this是在例項化的時候來確定指向誰,比如第一次例項化物件的時候(語句③),那 麼當時this就是指向obj
1物件,
那麼執行
語句②的
列印時就
把pri
nt(obj1物件,那麼執行語句②的列印時就把print(
this->obj
1−>na
me),
那麼當然
就輸出了
」pbp
home
」。第二
個例項的
時候,p
rint
(obj1−>name),那麼當然就輸出了」pbphome」。第二個例項的時候,print(
this->name )變成了print( $obj2->name ),於是就輸出了」php」。所以說,this就是指向當前物件例項的指標,不指向任何其他物件或類。
二、php中this、self、parent的區別之二
此篇我們就self的用法進行講解
首先我們要明確一點,self是指向類本身,也就是self是不指向任何已經例項化的物件,一般self使用來指向類中的靜態變數。假如我們使用類 裡面靜態(一般用關鍵字static)的成員,我們也必須使用self來呼叫。還要注意使用self來呼叫靜態變數必須使用 :: (域運算符號),見例項。
<?php
class counter //定義乙個counter的類
//列印lastcount數值
function printlastcount()
}//例項化物件
$obj = new counter();
$obj->printlastcount(); //執行到這裡的時候,程式輸出 1
?>
這裡要注意兩個地方語句①和語句②。我們在語句①定義了乙個靜態變數fir
stco
unt,
那麼在語
句②的時
候使用了
self
呼叫這個
值,那麼
這時候我
們呼叫的
就是類自
己定義的
靜態變數
firstcount,那麼在語句②的時候使用了self呼叫這個值,那麼這時候我們呼叫的就是類自己定義的靜態變數
frestcount。我們的靜態變數與下面物件的例項無關,它只是跟類有關,那麼我呼叫類本身的的,那麼我們 就無法使用this來引用,因為self是指向類本身,與任何物件例項無關。然後前面使用的this呼叫的是例項化的物件$obj,大家不要混淆了。
關於self就說到這裡,結合例子還是比較方便理解的。
三、php中this、self、parent的區別之三
此篇我們就parent的用法進行講解。
首先,我們明確,parent是指向父類的指標,一般我們使用parent來呼叫父類的建構函式。例項如下:
<?php
//建立基類animal
class animal
}//定義派生類person 繼承自animal類
class person extends animal
//派生類的成員函式,用於列印,格式:名字 is name,age is 年齡
function printperson()
}//例項化person物件
$personobject = new person( 「male」, 「21″);
//執行列印
$personobject->printperson(); //輸出結果:pbphome is male,age is 21
?>
裡面同樣含有this的用法,大家自己分析。我們注意這麼個細節:成員屬性都是public(公有屬性和方法,類內部和外部的**均可訪問)的,特 別是父類的,這是為了供繼承類通過this來訪問。關鍵點在語句①: parent::__construct( 「heiyeluren」 ),這時候我們就使用parent來呼叫父類的建構函式進行對父類的初始化,這樣,繼承類的物件就都給賦值了name為pbphome。我們可以測試下, 再例項化乙個物件$personobject1,執行列印後name仍然是pbphome。
總結:this是指向物件例項的乙個指標,在例項化的時候來確定指向;self是對類本身的乙個引用,一般用來指向類中的靜態變數;parent是對父類的引用,一般使用parent來呼叫父類的建構函式。
如何區別PHP中this self parent?
一 php中this self parent的區別之一 物件導向程式設計 oop,object oriented programming 現已經成為程式設計人員的一項基本技能。利用oop的思想進行php的高階程式設計,對於提高php程式設計能力和規劃web開發構架都是很有意義的。php5經過重寫後,...
php中 r r n t的區別
url n 軟回車 在windows 中表示換行且回到下一行的最開始位置。相當於mac os 裡的 r 的效果。在linux unix 中只表示換行,但不會回到下一行的開始位置。r 軟空格 在linux unix 中表示返回到當行的最開始位置。在mac os 中表示換行且返回到下一行的最開始位置,相...
php中 r r n t的區別
n 軟回車 在windows 中表示換行且回到下一行的最開始位置。相當於mac os 裡的 r 的效果。在linux unix 中只表示換行,但不會回到下一行的開始位置。t 跳格 移至下一列 它們在雙引號或定界符表示的字串中有效,在單引號表示的字串中無效。r n 一般一起用,用來表示鍵盤上的回車鍵,...