首頁 >後端開發 >php教程 >第八節 訪問方式 [8]_PHP教程

第八節 訪問方式 [8]_PHP教程

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB原創
2016-07-21 16:10:49780瀏覽


PHP5的存取方式允許限制對類別成員的存取. 這是在PHP5中新增的功能,但在許多面向對象語言中都早已存在. 有了訪問方式,才能開發一個可靠的面向對象應用程序,並且構建可重用的物件導向類別庫.

像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) file://不等,因為ID不同
{
print("w1 and w2 are the same
n");
}
?> 一個子類別可能改變透過覆寫父類別方法來改變方法的存取方式,儘管如此,仍然有一些限制. 如果你覆寫了一個public類別成員,他子類別中必須保持public. 如果你覆寫了一個protected成員,它可保持protected或變成public.Private成員仍然只在當前類別中可見. 聲明一個與父類的private成員同名的成員將簡單地在當前類中建立一個與原來不同的成員. 因此,在技​​術上你不能覆寫一個private成員.

Final關鍵字是限制存取成員方法的另一個方法. 子類別不能覆寫父類別中標識為final的方法. Final關鍵字不能用於屬性. //haohappy注:PHP5的物件導向模型仍然不夠完善,如final不像Java中那樣對Data,Method甚至Class都可以用。

http://www.bkjia.com/PHPjc/314121.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/314121.htmlTechArticlePHP5的存取方式允許限制對類別成員的存取. 這是在PHP5中新增的功能,但在許多物件導向語言中都早已存在. 有了存取方式,才能開發一個可靠的...
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn