程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP 5.0對象模型深度探索之訪問方式

PHP 5.0對象模型深度探索之訪問方式

編輯:關於PHP編程

  php(做為現在的主流開發語言)5的訪問方式允許限制對類成員的訪問。這是在php(做為現在的主流開發語言)5中新增的功能,但在許多面向對象語言中都早已存在。有了訪問方式,才能開發一個可靠的面向對象應用程序,並且構建可重用的面向對象類庫。

  像C++和Java一樣,php(做為現在的主流開發語言)有三種訪問方式:public,private和protected. 對於一個類成員的訪問方式,可以是其中之一. 如果你沒有指明訪問方式,默認地訪問方式為public. 你也可以為靜態成員指明一種訪問方式,將訪問方式放在static關鍵字之前(如public static).

  Public成員可以被毫無限制地訪問.類外部的任何代碼都可以讀寫public屬性. 你可以從腳本的任何地方調用一個public方法。在php(做為現在的主流開發語言)的前幾個版本中,所有方法和屬性都是public, 這讓人覺得對象就像是結構精巧的數組。

  Private(私有)成員只在類的內部可見,你不能在一個private屬性所在的類方法之外改變或讀取它的值。同樣地,只有在同一個類中的方法可以調用一個private方法,繼承的子類也不能訪問父類中的private 成員。

  要注意,類中的任何成員和類的實例都可以訪問private成員。看例子6.8,equals方法將兩個widget進行比較.==運算符比較同一個類的兩個對象,但這個例子中每個對象實例都有唯一的ID.equals方法只比較name和price。注意equals方法如何訪問另一個Widget實例的private屬性,Java和C都允許這樣的操作。

  Listing 6.8 Private members

class Widget
{
 private $name;
 private $price;
 private $id;

 public function __construct($name, $price)
 {
  $this->name = $name;
  $this->price = floatval($price);
  $this->id = uniqid();
 }
 //checks if two widgets are the same 檢查兩個widget是否相同
 public function equals($widget)
 {
  return(($this->name == $widget->name)AND ($this->price == $widget->price));
 }
}
$w1 = new Widget(Cog, 5.00);
$w2 = new Widget(Cog, 5.00);
$w3 = new Widget(Gear, 7.00);

//TRUE
if($w1->equals($w2))
{
 print("w1 and w2 are the same n");
}

//FALSE
if($w1->equals($w3))
{
print("w1 and w3 are the same n");
}

//FALSE, == includes id in comparison
if($w1 == $w2) //不等,因為ID不同
{
print("w1 and w2 are the same n");
}
?>

  如果你對面向對象編程不熟悉,你可能想知道用private成員的目的是什麼. 你可以回憶一下封裝和耦合的想法,這在本章開頭我們有討論過。Private成員有助於封裝數據,他們可以隱藏在一個類內部而不被類外部的代碼接觸到,同時他們還有助於實現松散的耦合. 如果數據結構外的代碼不能直接訪問內部屬性,那麼就不會產生一個隱性的關聯性。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved