php7實踐指南 ch9類與物件 類中的關鍵字

2021-10-14 13:04:35 字數 2235 閱讀 6072

類中的關鍵字

final、clone、instanceof、「==」、「===」。

9.6.1 final關鍵字

子類可覆寫父類中的方法,但是在有些時候並不希望父類中的方法被重寫,這時只需要在父類中的方法前加上final控制符,該方法便不能被子類重寫,否則會報錯。例如,下面的**就不是乙個合法的php指令碼:

<?php 

class father

}class son extends father

}

因為子類son試圖重寫父類中被final修飾的test()方法,所以執行以上程式將會出現如下錯誤:

9.6.2 clone關鍵字

可通過clone關鍵字轉殖乙個物件,轉殖後的物件相當於在記憶體中重新開闢了乙個空間,轉殖得到的物件擁有和原來物件相同的屬性和方法,修改轉殖得到的物件不會影響原來的物件,例如:

<?php 

class father

}$obj = new father();

$obj_clone= clone $obj;

$obj_clone->name='chendalong';

echo $obj->name;

執行以上程式,將會列印出結果:chenxiaolong。可見轉殖得到的物件$obj_clone修改自己的屬性名並不影響被轉殖的物件。

注意,如果使用「=」將乙個物件賦值給乙個變數,那麼這時得到的將是乙個物件的引用,通過這個變數改變屬性的值將會影響原來的物件。示例如下:

<?php 

class father

}$obj=new father();

$obj_clone=$obj;

$obj_clone->name='chendalong';

echo $obj->name,$obj_clone->name;

執行以上程式的輸出結果為:

chendalongchendalong

可以使用__clone()魔術方法將轉殖後的副本初始化,也可理解為當物件被轉殖時自動呼叫這個方法。

<?php 

class father

function __clone()

}$obj=new father();

$obj_clone= clone $obj;//觸發__clone()方法

echo $obj->name,$obj_clone->name;

執行以上程式的結果為:

hahchenxiaolongchendalong

9.6.3 instanceof關鍵字

instanceof關鍵字可檢測物件屬於哪個類,也可用於檢測生成例項的類是否繼承自某個介面。示例**如下:

<?php 

class father

}inte***ce database

class mysql implements database

}$obj = new father();

$mysql= new mysql();

var_dump($obj instanceof father);

var_dump($mysql instanceof database);

執行以上程式將會輸出以下結果:

bool(true) bool(true)

9.6.4 「==」和「===」

可使用「= =」和「= = =」比較兩個物件,「= =」比較兩個物件的內容是否相同,即是否具有相同的屬性和方法,相同就返回bool(true),否則返回bool(false)。「= = =」比較兩個物件是否為同一引用,是就返回bool(true),否則返回bool(false)。示例**如下:

<?php 

class father

}$obj= new father();

$obj_2=clone $obj;

$obj_3=$obj;

var_dump(($obj==$obj_2),($obj===$obj_2),($obj===$obj_3));

執行以上程式的結果為:

bool(true) bool(false) bool(true)

php7實踐指南 ch9類與方法 自動載入

9.4 自動載入 很多時候寫物件導向的應用程式時對每個類的定義建立乙個php原始檔。乙個很大的煩惱是不得不在每個指令碼開頭寫乙個長長的包含檔案列表 每個類乙個檔案 對於每乙個類檔案都需要使用require或者include引入。php中提供了兩個可用來自動載入檔案的函式 autoload 和spl ...

php7實踐指南 ch9類與方法 抽象類和介面

9.5 抽象類和介面 抽象類和介面都是不能被例項化的特殊類,可以在抽象類和介面中保留公共的方法,將抽象類和介面作為公共的基類。9.5.1 抽象類 abstract class class name乙個抽象類必須至少包含乙個抽象方法,抽象類中的方法不能被定義為私有的 private 因為抽象類中的方法...

php7實踐指南 ch19 php設計模式

設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣。專案中合理地運用設計模式可以完美地解決很多問題,每種模式在現實中都有相應的原理來與之對應,每種模式都描述了乙個在我們周圍不斷重 生的問題,以及該問題的核心解決方案,這也是設計模式能被廣泛應用的原因。19.2 工廠模式 工廠模式屬於建立型模式,提供了...