PHP面向對象(一):類與類的實例化

1)、類、對象、實例的關係

類是對象的抽象,對象是類的具體化,實例是對象的另一種名稱。

2)、類的定義

①、成員屬性(變量)的定義與使用

成員屬性必須 var public protected private

語法:

形式1var  $v1 ;     //定義不賦值

形式2 var  $v2 = 2; //定義的同時可以賦值,該值只能是“直接值”,常量(值),不能是變量值,也不能是“計算表達式”

形式3public  $v1;

形式4public  $2 = 2;  //其實var是“public”一個別名,正式用public更好。

作用:對事物特徵的描述。

錯誤形式:

$v1 = 1;

var    $v2 = 1+3;   //右邊不能是計算表達式

public  $v3 = $v2;  //右邊不能是變量

使用形式:

$對象->屬性名;//注意:屬性名前面沒有$符號。

②、成員方法(函數)的定義與使用

語法:關鍵字(缺省時默認public) + function + 名稱(參數)

定義成員方法的時候可以加參數也可以不加參數

③、this,self,parent三個關鍵字

this就是指向當前對象實例的指針,不指向任何其他對象或類。

self通常只能在某個類的某個方法內部代表該類的名稱。

parent如果想在子類中調用父類的同名方法,那麼請你使用關鍵字parent::+方法名()

④、php鏈式調用原理

在一個類中有多個方法,當你實例化這個類,並調用方法時只能一個一個調用

如果要實現鏈式調用,這要在方法的結束添加return $this即可。

3)、static關鍵字

static 關鍵字來定義靜態方法和屬性。static 也可用於定義靜態變量以及後期靜態綁定

①、靜態類:

PHP中和Java中一樣:如果一個類要被聲明爲static的,只有一種情況,就是靜態內部類。

類中成員有:靜態的和非靜態的,而靜態類只有一種,那就是靜態內部類。

②、靜態成員

靜態屬性:只隸屬於類本身——也可以看做是所有對象的“共有數據”。

使用:類::$靜態屬性名

靜態方法:同樣隸屬於類,而不是隸屬於具體對象。

使用:類名::靜態方法名();

【注】1、靜態方法中只能調用靜態屬性和靜態方法,不能調用非靜態屬性和方法,self::方法名()、self::屬性名

           2、動態方法中靜態方法和動態方法都可以調用,如果在同一個類中:

調用靜態方法使用:self::方法名()、self::屬性名,

調用動態方法用this−>方法名()、this−>方法名()、this->屬性名

          3、只有實例化的時候纔會自動調用構造函數,所以只有動態類纔可以觸發構造函數,靜態類不會觸發構造函數

          4、由於靜態方法不需要通過對象即可調用,所以僞變量 $this 在靜態方法中不可用。

          5、靜態屬性只能被初始化爲文字或常量,不能使用表達式。所以可以把靜態屬性初始化爲整數或數組,但不能初始化爲另一個變量或函數返回值,也不能指向一個對象。

          6、自 PHP 5.3.0 起,可以用一個變量來動態調用類。但該變量的值不能爲關鍵字 self,parent 或 static。

③、後期靜態綁定:

Self:通常只能在某個類的某個方法內部代表該類的名稱,所以指向當前A類的who方法,static有後期綁定的概念,所以指向B類,因爲是B在調用test方法,所以指向B類,而B類中有who方法。

4)、類常量(const關鍵字)

1:類裏面定義的常量,用const定義,常量是屬於類的,不是對象的。

2:定義類中的常量的時候必須給初始值

3:在使用類中的常量的時候,要使用類名::+常量名或者self::+常量名來調用

4:在類的外部調用類的常量,只能使用類名::+常量名來調用

5:類中定義的常量只歸類所有,不歸對象所有,不能通過對象來調用

類內部調用類常量:

類外部調用類常量:

5)、範圍解析操作符(::)

作用:可以用於訪問靜態成員,類常量,還可以用於覆蓋類中的屬性和方法。

實例1:類的外部使用 :: 操作符

實例2:self,parent 和 static 這三個特殊的關鍵字是用於在類內部對其屬性或方法進行訪問的

實例3:調用父類的方法

6)、實例化中的問題

實例化對象的格式爲:

$變量名 = new 類名();   //括號裏可傳參數

給對象中的成員屬性賦值的格式爲:

$引用名 ->成員屬性 = 值;

調用對象中的成員方法的格式爲:

$引用名 -> 成員方法;

成員方法使用成員屬性的格式爲

$this -> 成員屬性;

實例化對象時參數問題:

1:當我們實例化一個php類的時候,要怎麼傳遞參數呢?這取決於該類的構造方法。

2:可以通過var_dump()打印對象,不過只能打印對象的屬性,它的方法不能打印出來。

3:要想獲取對象的方法列表,可以用get_class_methods函數。

【注】

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章