本文執行個體總結了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程式設計有所協助。