php 物件導向基礎

來源:互聯網
上載者:User

簡介:這是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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.