簡介:這是php 物件導向基礎的詳細頁面,介紹了和php,有關的知識、技巧、經驗,和一些php源碼等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=330423' scrolling='no'>
傳統開發方法存在的問題:
1). 軟體重用性差; 2). 軟體可維護性差; 3). 無很好的擴充性
物件導向的三大特點:封裝,繼承,多態
1. 物件導向入門
類、屬性、方法、建構函式、解構函式
<?phpclass MyPc{public $name="預設";var $price; function MyPc($name=""){//如果不賦預設值,調用該方法時如果不傳參數,會提示警告$this->name=$name;}//function __construct(){}//建構函式 function vod() { return $this->name." 電腦"; } function __destruct(){//解構函式 echo $this->name."<br>";//後進先出的原則 } function test(){ return "磨滅了<br>"; }}echo MyPc::test();//類名直接存取方法,方法中不能有執行個體變數的引用$pc1 = new MyPc("我的");$pc2 = new MyPc("你的");echo $pc1->vod()."<br>";$pc1=null;//手動回收,自動調用__destruct()方法echo $pc2->vod()."<br>";$pc2=null;//手動回收,自動調用__destruct()方法?>
2. 類的封裝
封裝是把一些相關的屬性和行為隱藏起來,從而得到保護和安全
封裝關鍵字
public 表示全域,類內部外部子類都可以訪問;
protected表示受保護的,只有本類或子類或父類中可以訪問;
private表示私人的,只有本類內部可以使用;
<?php//類的封裝和應用class MyPc{private $name;private $age;function __construct($name=""){return $this->name=$name;}function __get($name){return $this->name;}function __set($n,$v){if($v>100){$this->$n=$v;}}private function power(){return $this->name." 開啟電源";}function ok(){return $this->power().",開機成功";}}$pc1=new MyPc("電腦");$pc1->name=1000;//如果沒有__set()方法,會報錯$pc1->age=200;echo $pc1->name;//如果沒有__get()方法,會報錯echo $pc1->age;//__get()和__set()方法/*問題: __get方法和__set方法在類中只能定義一次,如果有多個私人屬性,如何指定對應的get和set方法__get和__set方法只是用來得到和設定屬性的值,如果有多個,就在方法體裡一一設定就行了*/?>
3. 類繼承、抽象、介面、多態
<?php//PHP中使用extends進行單一繼承class Root{function root1(){return "Root print<br>";}}class Son extends Root{function root1(){//覆蓋父類的方法,如果想訪問父類的方法,可用 類名::方法名()來訪問return "Root:".Root::root1()."in son's root";}function son1(){//此時可用$this變數來訪問父類的方法return $this->root1()."Son print<br>";}}$p=new Son();echo $p->son1();echo $p->root1();//抽象類別//php抽象類別裡必須有抽象方法,繼承抽象類別時必須實現所以的抽象方法//java的抽象類別裡可以沒有抽象方法 abstract class A{ abstract function fun1(); abstract function fun2(); function ok(){ } } class B extends A{ function fun1(){ echo "func1"; } function fun2(){ echo "func2"; } }//介面/* * 所需的關鍵字interface implements * 用法和java同 * 如果同時要繼承和實現介面,先繼承後介面,單繼承多介面 * *///多態/*運算子 :instanceof * * */ class C{} class D{} $a=new C;//new C的時候居然可以不需要() //echo $a; if($a instanceof C){ echo '<br>C'; }?>
4. 一些方法
__tostring()、__call()、__clone()、__autoload()
<?php//__tostring()方法,類似java的toString 方法 //對象方法異常處理__call($funname,$arr_value) /* * 如果調用的方法不存在,會自動調用__call方法 * __call方法主要用來調試和吸收錯誤 * */ //複製對象的應用 /* * 方法名 __clone() * 關鍵字 clone*/ //自動載入對象的方法 /* * 方法名 __autoload() * 該方法是在類以外單獨的方法 * */ class my{ public $name="我的類"; function __toString(){ return $this->name."tostring <br>"; } function __call($methodname,$value){ echo "不存在的方法為:".$methodname."<br>"; echo "錯誤碼為:".print_r($value)."<br>";//參數值是以數組的形式傳遞,故用print_r列印 } function __destruct(){ echo "清理一個對象<br>"; } function __clone(){//使用clone關鍵字複製時會自動調用該方法 $this->name="複製的值"; } } $p=new my(); echo $p; $p->demo("test");//demo方法並不存在,會調用__call方法,如果沒有__call方法會報錯 $b=clone $p;//複製一個對象,執行完後,__destruct()會執行兩次 echo $b->name."<br>"; function __autoload($class_name){ include($class_name.".php"); } $al=new autoload(); $al->autoloadtest(); ?>
5. 常用的關鍵字
<?php//類中的常用關鍵字/* * final * * 用來定義類和方法的一個重要關鍵字, * 當定義類的時候該類將不能被繼承,當用來定義方法的時候該方法將不能被重載 * * self * * 用來用類訪問當前類中的內容的關鍵字, * 類似與$this關鍵字,但$this是需要類執行個體化以後才可以使用,self 可以直接存取當前類中的內部成員 * * 因為沒有執行個體化類訪問內部屬性或者方法是沒有意義的,所以self一般用來訪問類中的:靜態成員,常量,或者其他定義內容 * self :: 類內部成員(屬性或者方法) <==>類名 :: 類內部成員(屬性或者方法) * 問題:self和this的區別 * * static * 用來定義類的靜態屬性或方法,可以在類未被執行個體化時使用 * 靜態屬性單獨佔用記憶體而不會因建立多個對象時而導致同樣的方法或者屬性重複佔用。 * * 靜態方法內部禁止出現非靜態內容(不能使用this關鍵字) * * 靜態成員的訪問: * 類名稱 : : 靜態成員 * self : : 靜態成員 * * const * * 用來定義類中的常量,類似PHP外部定義常量的關鍵字define(); * Const只能修飾類當中的成員屬性! * 1、建議大寫常量 * 2、常量不使用$符號 * 常量的訪問: * 類名稱 : : 常量 * self : : 常量 * */?>
“php 物件導向基礎”的更多相關文章 》
愛J2EE關注Java邁克爾傑克遜視頻站JSON線上工具
http://biancheng.dnbcw.info/php/330423.html pageNo:11