php物件導向的特性和java的思想是一樣的,只不過一個是弱類型語言一個是強型別語言,兩者的實現還是有許多不同點的,功能上也只能點到即止,由於我兩者經常搞混,於是寫這篇文章來總結一下php的物件導向的一些知識點,方便日後查詢;class Person{var $name;private $age;function Person(){ //老版構造方法,方法名和類名相同// 建構函式在對象產生時首先自動執行的函數,一般用來初始設定變數}function __construct(){ //php5新版構造方法}function __destruct(){ //解構函式// 對象失去引用後自動執行的函數(引用放在棧中,對象放在堆中)}private function study(){// 關鍵字private用來聲明私人屬性或方法,私人屬性或方法不能被外部存取,// 只有在類裡面能夠訪問,並且私人的屬性和方法不能被繼承}protected function study(){// 關鍵字protected用來聲明受保護的屬性或方法,受保護的屬性或方法不能被外部存取,// 只有在類裡面能夠訪問,但受保護的的屬性或方法可以被繼承}public function study(){// public聲明共有的方法或屬性,省略不寫的函數或方法都是預設的public}常用的一些系統方法__set() , __get() , __isset() , __unset();__toString() , __clone() , __call() , __autoload();function __get($name){// 當外部試圖訪問對象私人屬性的時候自動調用,並且接受的參數就是外部試圖訪問的屬性名稱}function __set($name,$value){// 當外部試圖設定對象私人屬性的時候自動調用,並且接受的參數是屬性名稱和值}function __isset($name){// 當外部使用isset()函數來測試一個對象的私人屬性是否存在時執行的函數,自動接受測試的屬性名稱}function __unset($name){// 當外部使用unset()函數來試圖刪除一個對象的私人屬性時自動調用,自動接受試圖刪除的屬性名稱}function __toString(){// 如果直接輸出一個對象的引用(指標)的時候會自動調用本函數return str; //必須返回一個字串}function __clone(){// 如果外部使用clone關鍵字複製對象($a1=clone $a2)的話會自動調用本函數// 可以用來初始化,此時的$this代表新複製的對象$a1,代表被複製對象的是$that//$a1=clone $a2 區別於$a1=$a2,前者在堆中新建立了一個對象,後者只是同一個對象多了一個指標指向它}function __call($funName,$argus){// 當調用一個對象不存在的方法時自動調用此函數,自動接受參數$funName(不存在的函數名)// 參數$argus為數組}__autoload()函數:這個函數不是寫在對象裡面的,是寫在一個php檔案的頂部用來自動載入這個php頁面使用到的類function __autoload($className){ include $className."php" //組裝成一個完整路徑 }}繼承:class Boy extends Person{var $hoby;function playgame(){}}php中不支援函數重載,因為弱類型的原因,參數的類型不確定,因為php支援函數動態參數,所以參數個數不確定,所以php中只能覆蓋函數(方法重寫)方法重寫:在子類方法中加上一句 paret::方法名();就把父類的方法裡面的代碼加入到新方法中了php物件導向中的常見關鍵字:final static constfinal class Person{// 加上關鍵字final的類不能被繼承final function study(){// 使用final關鍵字的函數不能被重載(重寫)}}使用static修飾的方法或屬性可以不用執行個體化對象直接使用類名::方法()或類名::屬性靜態方法中不能使用非靜態屬性const修飾常量:const NUM=100;常量名習慣大寫關鍵字$this和self前者代表本對象,後者代表本類對象的序列化和反序列化序列化:serialize(value)參數為對象名,函數的傳回值為字串反序列化:unserialize(str)參數為字串,函數的傳回值為對象什麼時候使用:1,在網路傳輸的時候,2,將對象寫入檔案或資料庫的時候部分序列化:在對象中添加這個方法:function __sleep(){$arr = array("name","age"); //將要序列化的屬性以數組的形式傳入return $arr;}在反序列化時自動調用這個方法(如果對象中沒寫則不調用):function __wakeup(){//類似於__clone(),主要是做一些初始化工作}抽象方法和抽象類別:抽象方法:abstract function abd();只有方法名,沒有方法體含有抽象方法的類叫抽象類別,也需要使用 abstract 關鍵字修飾抽象類別就是在普通類的基礎上多了抽象方法抽象類別不能被執行個體化,只作為一個規範繼承抽象類別的類必須實現裡面的抽象方法,否則也是抽象類別,不能執行個體化對象介面:介面的聲明interface demo{ }所有成員屬性必須是常量所有方法都是抽象的所有成員都必須是 public一個類只能繼承一個父類,但是可以實現多個介面class one implements two{}php中的多態(和java不同)通常php實現多態是這樣的:通常父類是抽象類別或者介面由子類去實現,那麼子類中就都含有相同的方法名,但是每個子類的實現不同
http://www.bkjia.com/PHPjc/735892.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/735892.htmlTechArticlephp物件導向的特性和java的思想是一樣的,只不過一個是弱類型語言一個是強型別語言,兩者的實現還是有許多不同點的,功能上也只能點到...