如何區別PHP中this self parent?

2021-09-22 11:14:16 字數 3220 閱讀 5535

一、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 一般一起用,用來表示鍵盤上的回車鍵,...