面向?qū)ο缶幊痰娜攸c(diǎn): 封裝性,繼承性(PHP支持單繼承),多態(tài)性 PHP的一個(gè)類必須在一段代碼段中,即一個(gè)“” class PhpClass{ public $name; public function toString(){ return 'PhpClass'; } }
定義成員方法: [關(guān)鍵詞] function 方法名(){...} 訪問成員方法: 對(duì)象名->成員方法 定義成員變量: [關(guān)鍵字] 成員變量名 訪問成員變量: 對(duì)象名->成員變量
關(guān)鍵字可以使用 public、private、protected、static和final中的任意一個(gè) 定義類常量: const 常量名 訪問類常量: 類名::常量名 public $name; const PI = 3.1415926; // 不能有修飾詞 public function toString(){ return 'PhpClass'; } public function printPI(){ echo PhpClass::PI.' '; // 直接通過類名訪問 } public function printName(){ echo $this->name; // 注意此處的寫法 } } $lycClass = new PhpClass(); echo $lycClass::PI.' '; // 通過對(duì)象訪問 echo PhpClass::PI.' '; echo $lycClass->toString().' '; $lycClass->name = 'Lyc'; $lycClass->printName();
構(gòu)造方法和析構(gòu)方法: 構(gòu)造方法: 不寫會(huì)默認(rèn)一個(gè) void __construct([mixed args [,...]]) 下劃線為兩個(gè) 析構(gòu)方法:
void __destruct(void) 下劃線為兩個(gè) php使用垃圾回收機(jī)制,不用 unset 函數(shù)析構(gòu)方法也會(huì)自動(dòng)被調(diào)用 class PhpClass{ public $name; //public function __construct(){} PHP不支持 C++、java 形式上的方法重載 public function __construct($name){ $this->name = $name; } public function __destruct(){ echo '析構(gòu)一下...'; } } $lycClass = new PhpClass('lyc'); echo $lycClass->name; //unset($lycClass); 不寫也會(huì)調(diào)用 __destruct()
繼承和多態(tài) 繼承: 在PHP中子類可以繼承父類的所有public和protected修飾的成員變量和方法,包括構(gòu)造方法。 聲明繼承的格式: class subClass extendes superClass{ ...... } 多態(tài):(覆蓋和重載兩種,覆蓋和c++、java中重寫相同) 重載概念和c++、java中的重載概念相同,但實(shí)現(xiàn)方式不同,重載實(shí)例:
class PhpClass{ public $nae; // PHP中有很多以兩個(gè)下劃線開頭的方法,被稱為魔術(shù)方法*********************** /* __call()方法的作用是: 當(dāng)程序試圖調(diào)用不存在或不可見的成員方法時(shí) * PHP會(huì)先調(diào)用__call()方法來存儲(chǔ)方法名及其參數(shù)。__call()方法包含 * 兩個(gè)參數(shù),即方法名和方法參數(shù)。其中,方法參數(shù)是以數(shù)組形式存在的 */ function __call($name, $arguments){ // 通過count($arguments)獲得參數(shù)個(gè)數(shù) $argNum = count($arguments); //echo $argNum.'*************** '; if($name == 'right'){ // 一下方法調(diào)用中的 $this-> 不可省略 switch($argNum){ case 0: $this->right0(); break; case 1: $this->right1($arguments[0]); break; case 2: $this->right2($arguments[0],$arguments[1]); break; default: echo '參數(shù)可能多了,我不干了... '; } }else if($name == 'left'){ switch($argNum){ case 1: $this->left1($arguments[0]); break; case 2: $this->left2($arguments[0],$arguments[1]); break; default: echo '參數(shù)不對(duì),我不干了... '; } }else{ echo '什么也不做...'; } } //幾種實(shí)現(xiàn)重載的方法,方法名不相同 public function right0(){ echo 'right0 '; } public function right1($arg){ echo 'right1 '.$arg.' '; } public function right2($arg1,$arg2){ echo 'right1 '.$arg1.' '.$arg2.' '; } public function left0(){ echo 'left0 '; } public function left1($arg){ echo 'left1 '.$arg.' '; } public function left2($arg1,$arg2){ echo 'left1 '.$arg1.' '.$arg2.' '; } } $lyc = new PhpClass(); $lyc->left(); // 此處實(shí)現(xiàn)重載 $lyc->left('LEFT'); $lyc->left('LEFT','LYC'); $lyc->right(); $lyc->right('RIGHT'); $lyc->right(123,'LYC'); $lyc->right(123,'lyc','right');
|