PHP類相關知識點實例總結
本文實例總結了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);
③ 一個類中有抽象方法,則該類必須聲明為抽象類。
④ 子類繼承自一個抽象類,則子類不行實現(xiàn)父類中的所有抽象方法,除非子類也繼續(xù)作為抽象類。
⑤ 子類實現(xiàn)抽象父類的方法時,訪問控制符范圍不能降低,且方法的參數(shù)也必須一致(重寫)。
接口
接口可以看作是抽象類的更高層面的抽象,可以說是抽象類的特例
interface a{ function func(); } class A implements a { function func(){} }
類:屬性、類常量、方法
抽象類:屬性、類常量、抽象方法
接口:接口常量、抽象方法
① 相比抽象類,接口可實現(xiàn)‘多繼承'
class A implements a,b,c{}
② 一個接口只能繼承一個接口
interface a extends b{}
③ 其中方法都是抽象方法不用abstract修飾,即下級類要么實現(xiàn)接口的方法(implements),要么也聲明為抽象方法
重載技術
1. 屬性重載:如果使用一個不存在的屬性,就會調(diào)用類中預先定義好的某個方法以處理數(shù)據(jù);
對于屬性不用的應用場景,做如下處理
① 取值:自動調(diào)用類中的__get()
② 賦值:自動調(diào)用類中的__set()
③ 判斷是否存在:自動調(diào)用類中的__isset()
④ 銷毀:自動調(diào)用類中的__unset()
前提是預先定義好這些方法,否則會報錯
<?php class 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 exists 1 boolean true
2. 方法重載:如果使用一個不存在的方法,就會調(diào)用類中預先定義好的某個方法以處理該行為;
對于方法不用的應用場景,做如下處理
① 在對象中調(diào)用不可訪問的方法:__call()
② 靜態(tài)方式中調(diào)用不可訪問方法:__callStatic()
<?php class 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 exist function staFunc not exist
注意:以上方法都屬于魔術方法,都帶有參數(shù)
更多關于PHP相關內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O計入門教程》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《PHP網(wǎng)絡編程技巧總結》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
相關文章
PHP實現(xiàn)的數(shù)據(jù)對象映射模式詳解
這篇文章主要介紹了PHP實現(xiàn)的數(shù)據(jù)對象映射模式,結合實例形式分析了php數(shù)據(jù)對象映射模式的原理、實現(xiàn)步驟及相關操作技巧,需要的朋友可以參考下2019-03-03php echo()和print()、require()和include()函數(shù)區(qū)別說明
簡單總結echo()和print()、require()和include()等易混淆函數(shù)的區(qū)別2010-03-03apache+codeigniter 通過.htcaccess做動態(tài)二級域名解析
今天將服務器php版本升到了5.4.4,然后將之前的一個項目改用apache,動態(tài)二級轉(zhuǎn)向用.htcaccess實現(xiàn)了動態(tài)二級域名解析,共享一下2012-07-07淺談PHP的排列組合(如輸入a,b,c 輸出他們的全部組合)
下面小編就為大家?guī)硪黄獪\談PHP的排列組合(如輸入a,b,c 輸出他們的全部組合)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03