PHP類相關知識點執行個體總結

來源:互聯網
上載者:User
本文執行個體總結了PHP類相關知識點。分享給大家供大家參考,具體如下:

最終類與最終方法

如果父類中的方法被聲明為 final,則子類無法覆蓋該方法。如果一個類被聲明為 final,則不能被繼承。

final class a{}class a{  final public function A(){}}

抽象類別與抽象方法

abstract class a {  public abstract function func();}class A extends a{  public function func(){}}

① 一個類可以使用abstract聲明為抽象類別;抽象類別是不能執行個體化的類,只用作其他類的父類。

abstract class name{}

② 一個方法可以使用abstract聲明為抽象方法;抽象方法只需要聲明方法頭,不需要大括弧部分的方法體。

abstract public function name($val);

③ 一個類中有抽象方法,則該類必須聲明為抽象類別。

④ 子類繼承自一個抽象類別,則子類不行實現父類中的所有抽象方法,除非子類也繼續作為抽象類別。

⑤ 子類實現抽象父類的方法時,存取控制符範圍不能降低,且方法的參數也必須一致(重寫)。

介面

介面可以看作是抽象類別的更高層面的抽象,可以說是抽象類別的特例

interface a{  function func();}class A implements a {  function func(){}}

類:屬性、類常量、方法

抽象類別:屬性、類常量、抽象方法

介面:介面常量、抽象方法

① 相比抽象類別,介面可實現‘多繼承'

class A implements a,b,c{}

② 一個介面只能繼承一個介面

interface a extends b{}

③ 其中方法都是抽象方法不用abstract修飾,即下級類要麼實現介面的方法(implements),要麼也聲明為抽象方法

重載技術

1. 屬性重載:如果使用一個不存在的屬性,就會調用類中預先定義好的某個方法以處理資料;

對於屬性不用的應用情境,做如下處理

① 取值:自動調用類中的__get()
② 賦值:自動調用類中的__set()
③ 判斷是否存在:自動調用類中的__isset()
④ 銷毀:自動調用類中的__unset()

前提是預先定義好這些方法,否則會報錯

<?phpclass bee{  public $ol = array();  public function __get($key){    if(isset($this->ol[$key])){      return $this->ol[$key];    }    return $key.' not exists';  }  public function __set($key,$val){    $this->ol[$key] = $val;  }  public function __isset($key){    if(isset($this->ol[$key])){      return true;    }    return false;  }  public function __unset($key){    unset($this->ol[$key]);  }}$obj = new bee();echo $obj->one;echo '<br>';$obj->one = 1;echo $obj->one;echo '<br>';var_dump(isset($obj->one));

運行結果如下:

one not exists1boolean true

2. 方法重載:如果使用一個不存在的方法,就會調用類中預先定義好的某個方法以處理該行為;

對於方法不用的應用情境,做如下處理

① 在對象中調用不可訪問的方法:__call()
② 靜態方式中調用不可存取方法:__callStatic()

<?phpclass bee{  public function __call($name,$arr){    echo '<br>';    echo 'function '.$name.' not exist';  }  static function __callStatic($name,$arr){    echo '<br>';    echo 'function '.$name.' not exist';  }  /*public function __call($name,$arr){    $num = count($arr);    if($num<1){      $name();    }else{      $name = $name.'_one';      $name($arr[0]);    }  }*/}$obj->func();bee::staFunc();/*$obj->func(1);function func(){  echo '<br>';  echo 'no.0';}function func_one($val){  echo '<br>';  echo 'no.'.$val;}*/

運行結果如下:

function func not existfunction staFunc not exist

注意:以上方法都屬於魔術方法,都帶有參數

希望本文所述對大家PHP程式設計有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.