PHP中this,self,parent的區別

2021-08-29 22:48:22 字數 3089 閱讀 7120

目錄

一、php中this,self,parent的區別之一this篇

二、php中this,self,parent的區別之二self篇

三、php中this,self,parent的區別之**arent篇

物件導向程式設計(oop,object orientedprogramming)現已經成為程式設計人員的一項基本技能。利用oop的思想進行php的高階程式設計,對於提高php程式設計能力和規劃web開發構架都是很有意義的。

php5經過重寫後,對oop的支援額有了很大的飛躍,成為了具備了大部分物件導向語言的特性的語言,比php4有了很多的物件導向的特性。這裡我主要談的是this,self,parent三個關鍵字之間的區別。從字面上來理解,分別是指這、自己、父親。先初步解釋一下,this是指向當前物件的指標(可以看成c裡面的指標),self是指向當前類的指標parent是指向父類的指標。我們這裡頻繁使用指標來描述,是因為沒有更好的語言來表達。關於指標的概念,大家可以去參考百科。

下面我們就根據實際的例子結合來講講。

<?php

class name          //建立了乙個名為name的類

//析構函式

function __destruct(){}

//列印使用者名稱成員函式

function printname()

} $obj1 = new name("pbphome");   //例項化物件 語句③

//執行列印

$obj1->printname(); //輸出:pbphome

echo"

";                                    //輸出:回車

//第二次例項化物件

$obj2 = new name( "php" );

//執行列印

$obj2->printname();                         //輸出:php

?>

說明:上面的類分別在 語句①和語句②使用了this指標,那麼當時this是指向誰呢?其實this是在例項化的時候來確定指向誰,比如第一次例項化物件的時候(語句③),那麼當時this就是指向$obj1物件,那麼執行語句②的列印時就把print( $this->name ),那麼當然就輸出了"pbphome"。第二個例項的時候,print($this->name )變成了print( $obj2->name),於是就輸出了"php"。所以說,this就是指向當前物件例項的指標,不指向任何其他物件或類。

此篇我們就self的用法進行講解

首先我們要明確一點,self是指向類本身,也就是self是不指向任何已經例項化的物件,一般self使用來指向類中的靜態變數。假如我們使用類裡面靜態(一般用關鍵字static)的成員,我們也必須使用self來呼叫。還要注意使用self來呼叫靜態變數必須使用::(域運算符號),見例項。 

<?php

class counter     //定義乙個counter的類

//列印lastcount數值

function printlastcount()

}//例項化物件

$obj = new counter();

$obj->printlastcount();                             //執行到這裡的時候,程式輸出1

?>

這裡要注意兩個地方語句①和語句②。我們在語句①定義了乙個靜態變數$firstcount,那麼在語句②的時候使用了self呼叫這個值,那麼這時候我們呼叫的就是類自己定義的靜態變數$frestcount。我們的靜態變數與下面物件的例項無關,它只是跟類有關,那麼我呼叫類本身的的,那麼我們就無法使用this來引用,因為self是指向類本身,與任何物件例項無關。然後前面使用的this呼叫的是例項化的物件$obj,大家不要混淆了。

關於self就說到這裡,結合例子還是比較方便理解的。第二篇結束。

此篇我們就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中mysql函式 php中mysql有關函式

1.mysql query 一般是用來查詢資料裡面的資料。如 username post name sql select from members where login name username result mysql query sql 以上程式是檢測資料庫中是否存在表單傳送過來的使用者名稱...

php 中set是什麼 PHP中

php中把以兩個下劃線 開頭的方法稱為魔術方法 magic methods 這些方法在php中充當了舉足輕重的作用。其中 set 設定乙個類的成員變數時呼叫 set 的作用 set property,value 方法用來設定私有屬性,給乙個未定義的屬性賦值時,此方法會被觸發,傳遞的引數是被設定的屬性...

php 中set是什麼 PHP中

php中把以兩個下劃線 開頭的方法稱為魔術方法 magic methods 這些方法在php中充當了舉足輕重的作用。其中 set 設定乙個類的成員變數時呼叫 set 的作用 set property,value 方法用來設定私有屬性,給乙個未定義的屬性賦值時,此方法會被觸發,傳遞的引數是被設定的屬性...