從OOP的視角看,不應區分語言。無論是C++、無論是Java、無論是.net還有更多面向對象的語言,只要你了解了OO的真谛,便可以跨越語言,讓你的思想輕松的跳躍。便沒有對於Java、.net、PHP 之間誰強誰弱的爭執了。 希望這個介紹PHP5面向對象編程(OOP)的資料能讓初學者受益,能讓更多的PHPer開始轉向OO的編程過程。 相對PHP4,PHP5在面向對象方面改變了很多。我們將只介紹PHP5環境下的面向對象。而我們必須改變自己來跟隨PHP5的發展。如果代碼結果在你的環境下執行不一致,請確認你的環境為PHP5。 我們假設讀者沒有任何面向對象的知識,即使你是第一次聽說OOP,也可以讀懂這文章。但我希望你必須對PHP有一些了解。 在後面我們將使用一些例子,來逐漸分析PHP5的OO基礎。 面向對象只解決了兩個問題,代碼的可擴展性 、代碼的可維護性。 不得不說句,php越來越像Java了。 Everything is Object:萬事萬物皆對象。 面向對象的編程(OOP)思想力圖使對計算機語言中對事物的描述與現實世界中該事物的本來面目盡可能的一致。面向對象語言與我們的生活是想通的,面向對象語言學習起來其實很簡單。在應用中更符合我們的生活邏輯。 類(Class)是用來描述一個對象(Object): 類描述了每個對象應包括的數據,類描述了每個對象的行為特征。 Class/Object:類(class)和對象(object)是面向對象方法的核心概念。 類是對一類事物描述,是抽象的、概念上的定義; 對象是實際存在的該類事物的每個個體,因而也稱實例(instance)。在計算機中,可以理解為,在內存中創建了實實在在存在的一個內存區域存儲著這個對象。 創建對象的過程稱為創建對象,也稱為實例化。 PHP5中的類和對象 我們先建立一個基礎的類。 PHP中使用關鍵字 class 來定義一個類。類的命名一般使用首字符大寫,而後每個單詞首字符大寫連接的方式方便閱讀。 view sourceprint? 1 <? 2 class Person 3 { 4 5 } 6 $p = new Person(); 7 echo $p; 8 ?> 這樣,我們就擁有了第一個PHP類。 我們繼續來使用這個類,使用 new 這個關鍵字創建對象,用echo打印$p 我們定義了一個變量 $p ,使用 new 這個關鍵字創建了一個Person的對象。 打印變量$p,我們看到輸出Object id #1 提示這是一個對象。 $p = new Person();也可以寫成 $p = new Person;,但不建議使用後面的這種方式。 PHP5 中的屬性 屬性:用來描述對象的數據元素稱為對象的屬性(也稱為數據/狀態) 在PHP5中,屬性指在class 中聲明的變量。在聲明變量時,必須使用 public private protected 之一進行修飾,定義變量的訪問權限。 •Public(公開): 可以自由的在類的內部外部讀取、修改。 •Private(私有): 只能在這個當前類的內部讀取、修改。 •Protected(受保護):能夠在這個類和類的子類中讀取和修改。 屬性的使用:通過引用變量的 -> 符號調用變量指向對象的屬性。 在方法內部通過 $this-> 符號調用同一對象的屬性。 view sourceprint? 01 <? 02 class Person{ 03 public $name = "Gonn"; //定義public屬性 $name. 04 public $age = 20; // 定義 public 屬性 $age; 05 } 06 $p = new Person(); // 創建對象 07 echo $p."<br>"; // 輸出對象 08 echo "他的名字是 ".$p->name; // 輸出對象$p的屬性 $name; 09 echo "<br>"; 10 echo '他的年齡是 '$p->age; //輸出age屬性. 11 ?> 程序輸出結果為: view sourceprint? 1 他的名字是 Gonn 2 他的年齡是 24 Person類有兩個屬性,$name 和 $age , 在實例化後,使用$p->name 和 $p->age 打印出屬性的內容。 當然,你可以在屬性定義時不設置初始值,那樣的話,就打印不出任何結果了。 改變對象的屬性,注意 8行和9行代碼,還有輸出結果的變化。我們看到輸出的屬性值被改變了。 view sourceprint? 01 <? 02 // 1-4.php 03 class Person{ 04 public $name = "NoName"; //定義public屬性 $name. 05 public $age = 20; // 定義 public 屬性 $age; 06 } 07 $p = new Person(); // 創建對象 08 $p->name = 'Tom'; //變更姓名為 Tom 09 $p->age = 25 ; // 變更年齡為 25 歲. 10 echo "他的名字是 ".$p->name; // 輸出對象$p的屬性 $name; 11 echo "<br>"; 12 echo '他的年齡是 '.$p->age; //輸出age屬性. 13 ?> 創建一個Person的對象,改變這個對象的屬性。為它命名,查看它的名字。你就是機器裡面這個Person對象的上帝,按照你定義的規則,這個實實在在內存中的Person對象被創建了,而且它有了可以改變的屬性。 現在,我們就是計算機世界的上帝,准備好創造世界吧。 Private 修飾的屬性,在當前對象以外不能訪問。設置私有屬性是為了進行數據的隱藏。 隱藏:指對象的一種保護機制,使得它的屬性或方法不被外部的程序直接訪問。 view sourceprint? 1 <? 2 // 1-3.php 3 class Person{ 4 private $name = "Gonn"; //定義public屬性 $name. 5 public $age = 20; // 定義 public 屬性 $age; 6 } 7 $p = new Person(); // 創建對象 8 echo "他的名字是 ".$p->name; // 輸出對象$p的屬性 $name; 9 ?> 運行此程序將會輸出: view sourceprint? 1 Fatal error: Cannot access private property Person::$name in E:\PHPProjects\test.php on line 9 私有屬性不能被外部訪,這樣做的好處後面會介紹到。