1. 程式人生 > >PHP面向物件程式設計詳解:類和物件

PHP面向物件程式設計詳解:類和物件

從OOP的視角看,不應區分語言。無論是C++、無論是Java、無論是.net還有更多面向物件的語言,只要你瞭解了OO的真諦,便可以跨越語言,讓你的思想輕鬆的跳躍。便沒有對於Java、.net、PHP 之間誰強誰弱的爭執了。


希望這個介紹PHP5面向物件程式設計(OOP)的資料能讓初學者受益,能讓更多的PHPer開始轉向OO的程式設計過程。


相對PHP4,PHP5在面向物件方面改變了很多。我們將只介紹PHP5環境下的面向物件。而我們必須改變自己來跟隨PHP5的發展。如果程式碼結果在你的環境下執行不一致,請確認你的環境為PHP5。


我們假設讀者沒有任何面向物件的知識,即使你是第一次聽說OOP,也可以讀懂這文章。但我希望你必須對PHP有一些瞭解。


在後面我們將使用一些例子,來逐漸分析PHP5的OO基礎。


面向物件只解決了兩個問題,程式碼的可擴充套件性 、程式碼的可維護性。


不得不說句,php越來越像Java了。

整理參考:
http://www.lai18.com/content/425094.html

Everything is Object:萬事萬物皆物件。

面向物件的程式設計(OOP)思想力圖使對計算機語言中對事物的描述與現實世界中該事物的本來面目儘可能的一致。面嚮物件語言與我們的生活是想通的,面嚮物件語言學習起來其實很簡單。在應用中更符合我們的生活邏輯。


類(Class)是用來描述一個物件(Object):


類描述了每個物件應包括的資料,類描述了每個物件的行為特徵。


Class/Object:類(class)和物件(object)是面向物件方法的核心概念。


類是對一類事物描述,是抽象的、概念上的定義;


物件是實際存在的該類事物的每個個體,因而也稱例項(instance)。在計算機中,可以理解為,在記憶體中建立了實實在在存在的一個記憶體區域儲存著這個物件。


建立物件的過程稱為建立物件,也稱為例項化。


PHP5中的類和物件

我們先建立一個基礎的類。


PHP中使用關鍵字 class 來定義一個類。類的命名一般使用首字元大寫,而後每個單詞首字元大寫連線的方式方便閱讀。


<?
class Person 
{
 
}
$p = new Person();
echo $p;
?>


這樣,我們就擁有了第一個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-> 符號呼叫同一物件的屬性。


<?
class Person{
   public $name = "Gonn"; //定義public屬性 $name.
   public $age = 20; // 定義 public 屬性 $age;
}
$p = new Person(); // 建立物件
echo $p."<br>";    // 輸出物件
echo "他的名字是 ".$p->name;     // 輸出物件$p的屬性 $name;
echo "<br>";
echo '他的年齡是 '$p->age; //輸出age屬性.
?>


程式輸出結果為:


他的名字是 Gonn
他的年齡是 24


Person類有兩個屬性,$name 和 $age , 在例項化後,使用$p->name 和 $p->age 打印出屬性的內容。


當然,你可以在屬性定義時不設定初始值,那樣的話,就打印不出任何結果了。


改變物件的屬性,注意 8行和9行程式碼,還有輸出結果的變化。我們看到輸出的屬性值被改變了。


<?
// 1-4.php
class Person{
   public $name = "NoName"; //定義public屬性 $name.
   public $age = 20; // 定義 public 屬性 $age;
}
$p = new Person(); // 建立物件
$p->name = 'Tom'; //變更姓名為 Tom
$p->age = 25 ; // 變更年齡為 25 歲.
echo "他的名字是 ".$p->name;     // 輸出物件$p的屬性 $name;
echo "<br>";
echo '他的年齡是 '.$p->age; //輸出age屬性.
?>


建立一個Person的物件,改變這個物件的屬性。為它命名,檢視它的名字。你就是機器裡面這個Person物件的上帝,按照你定義的規則,這個實實在在記憶體中的Person物件被建立了,而且它有了可以改變的屬性。


現在,我們就是計算機世界的上帝,準備好創造世界吧。


Private 修飾的屬性,在當前物件以外不能訪問。設定私有屬性是為了進行資料的隱藏。


隱藏:指物件的一種保護機制,使得它的屬性或方法不被外部的程式直接訪問。


<?
// 1-3.php
class Person{
   private $name = "Gonn"; //定義public屬性 $name.
   public $age = 20; // 定義 public 屬性 $age;
}
$p = new Person(); // 建立物件
echo "他的名字是 ".$p->name;     // 輸出物件$p的屬性 $name;
?>


執行此程式將會輸出:


Fatal error: Cannot access private property Person::$name in E:\PHPProjects\test.php on line 9


私有屬性不能被外部訪,這樣做的好處後面會介紹到。

延伸閱讀