PHP筆記11-day15

抽象類,抽象方法

抽象類:

不能實例化的類;

abstract  class  類名 {}

抽象方法:

就是一個只有方法頭,沒有方法體的方法;

abstract  class  類名 {

abstract  function  方法名(形參1,形參2, .... )

}

抽象類和抽象方法的細節

1,抽象方法必須放在抽象類中;抽象類中可以沒有抽象方法(雖然不常見)

2,子類繼承了上級類的抽象方法,則必須:要麼去實現它(就是定義其方法體);要麼自身也是抽象類;

3,子類實現上級類的抽象方法,其本質就是“重寫”(覆蓋),則也要求滿足:

3.1, 訪問控制修飾範圍不能更小;

3.2, 方法的形參需要保持一致;

重載技術overloading

重載的基本概念

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

是指在一個類中,多個具有不同形參的同名方法的現象;

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

是指:對一個對象(或類)使用其不存在的屬性或方法的時候的,“特別處理機制”;

屬性重載

__GET($屬性名)

就是對一個對象的未定義的(不存在的)的屬性進行取值的時候,會自動調用該方法;

__SET($屬性名,值)

就是對一個對象的未定義的(不存在的)的屬性進行賦值的時候,會自動調用該方法;

class   A{

public  $arr = array();

function  __set($key, $value){

$this->arr[$key] = $value;

}

fucntion  __get($key){

if(  !empty ($this->arr[$key]) ){

return  $this->arr[$key];

}

else{

return  “未定義的屬性!”;

}

}

}

__ISSET($屬性名)

就是對一個對象的未定義的(不存在的)的屬性進行isset()判斷的時候,會自動調用該方法;

__UNSET($屬性名)

就是對一個對象的未定義的(不存在的)的屬性進行isset()判斷的時候,會自動調用該方法;

 

方法重載

是指對一個對象的未定義的方法進行調用的時候,會自動調用方法:__call($方法名,$實參數組 );

是指對一個類的未定義的靜態方法進行調用的時候,會自動調用靜態方法:__callstatic ($方法名,$實參數組 );

 

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

class  A  {

function  __call($name,  $arg ){

if( $name == “f1”){

$len = count($arg); //實參個數!

if( $len == 1){

//。。。。處理

}

else  if( $len == 2){

//。。。。處理

}

else  if( $len == 3){

//。。。。處理

}

else{

//不準備處理其他情況。。。這裏可以引發一個錯誤!

}

}

else if( $name == “f2”){

.......

}

..........

}

}

$a1 = new A();

$a1->f1(1);

$a1->f1(2, 3);

$a1->f1(3, 4, 5);

$a1->f2(1);

$a1->f2(2, 3);

 

 

接口(interface)技術

什麼是接口?

就是一種類似類的更爲“簡潔”的語法結構,其中只能定義常量和抽象;

接口(interface)定義形式:

interface  接口名{

常量定義若干個;。。。。。

抽象方法定義若干個;。。。。。//這裏抽象方法不要abstract和訪問控制,默認都是public

}

爲什麼需要接口?

是對單繼承的語法特性的一種“修正措施”,目的是爲了一定程度上模擬現實世界的“多繼承”特性;

 

使用形式:

實現接口:

class  類名   implements  接口1,接口2....{  。。。  }

接口之間的繼承

interface  接口1  extends  接口2{.....}

 

類和對象的成員訪問的另一個總結:


 

 

單例3步曲:

1,私有化構造方法:

2,定義一個私有的靜態變量,以存儲唯一的對象;

3,定義個靜態方法,以判斷是否需要進行實例化該唯一對象,並返回該對象;

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