PHP面向對象之重載


重載技術overloading

重載的基本概念

重載在“通常面向對象語言”中的含義:

是指,在一個類(對象)中,有多個名字相同但形參不同的方法的現象;

類似這樣:

class   C{

function  f1(){。。。}

function  f1($p1){。。。}

function  f1($p1,  $p2  ){。。。}

}

$c1 = new C();

$c1->f1();

$c1->f1(2);

$c1->f1(3,4);

 

 

重載在php語言”中的含義:

是指,當對一個對象或類使用其未定義的屬性或方法的時候,其中的一些“處理機制”;

比如:

class  A{

public  $p1 = 1;

}

$a1 = new A();

echo   $a1->p1; //1

echo   $a1->p2; //出錯,未定義的屬性!

則:php中的重載技術,就是來應對上述“出錯”的情況,使代碼不出錯,而且還能“優雅處理”;

 

舉例:

 

結果為:

 

使用php的重載技術,上述代碼修改為:

 

則結果是:

 

屬性重載

就是對一個對象的不存在的屬性進行使用的時候,這個類中預先設定好的應對辦法(處理機制);

 

屬性,本質,就是變量,其只有4個操作:

取值:

當對一個對象的不存在的屬性進行“取值”的時候,就會自動調用內部方法:__GET()

賦值:

當對一個對象的不存在的屬性進行“賦值”的時候,就會自動調用內部方法:__SET()

判斷(isset):

當對一個對象的不存在的屬性進行isset()判斷的時候,就會自動調用內部方法:__isset()

銷毀(unset):

當對一個對象的不存在的屬性進行unset()銷毀的時候,就會自動調用內部方法:__unset()

 

以上,4個方法,被稱為“魔術方法”;

 

__GET($屬性名)

在對一個對象的不存在的屬性進行“取值”的時候,會自動調用的方法;

我們其實是可以使用該方法來對這種“意外”情況進行某種特別的處理。

其中,該方法可以帶一個形參,表示這個要對之取值的不存在的屬性名(字符串);

 

 

__SET($屬性名,值)

當對一個對象的不存在的屬性進行“賦值”的時候,就會自動調用這個內部的魔術方法;

它有2個形參,分別代表要對不存在的屬性進行賦值的時候的“屬性名”和“屬性值”;

 

這個方法,結合__GET方法,往往可以使我們定義的類,就有一種“可方便擴展屬性”的特性。

即:類(或對象)的屬性,可以更為方便自由,如下所示:

 

 

__ISSET($屬性名)

當對一個對象的不存在的屬性進行isset()判斷的時候,就會自動調用內部方法:__isset()

用法:

$v1 = isset($對象 -> 不存在的屬性); // 此時就會調用這個對象的所屬類中的魔術方法:__isset()

 

 

 

 

__UNSET($屬性名)

 

當對一個對象的不存在的屬性進行unset()銷毀操作的時候,就會自動調用內部方法:__unset()

 

 

測試代碼:

 

結果:

 

 

方法重載

當對一個對象的不存在的實例方法進行“調用”的時候,會自動調用類中的__call()這個魔術方法;

 

當對一個類的不存在的靜態方法進行“調用”的時候,會自動調用類中的__callstatic()這個靜態魔術方法

 

基本應用實例:

 

 

改為:

 

 

 

利用php的重載技術,實現通常的“方法重載”:

 

以下為測試代碼:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM