|
php5的訪問方式允許限制對(duì)類成員的訪問. 這是在php5中新增的功能,但在許多面向?qū)ο笳Z言中都早已存在. 有了訪問方式,才能開發(fā)一個(gè)可靠的面向?qū)ο?a href=/pingce/yingyong/ target=_blank class=infotextkey>應(yīng)用程序,并且構(gòu)建可重用的面向?qū)ο箢悗?
像C++和Java一樣,php有三種訪問方式:public,private和protected. 對(duì)于一個(gè)類成員的訪問方式,可以是其中之一. 如果你沒有指明訪問方式,默認(rèn)地訪問方式為public. 你也可以為靜態(tài)成員指明一種訪問方式,將訪問方式放在static關(guān)鍵字之前(如public static).
Public成員可以被毫無限制地訪問.類外部的任何代碼都可以讀寫public屬性. 你可以從腳本的任何地方調(diào)用一個(gè)public方法. 在php的前幾個(gè)版本中,所有方法和屬性都是public, 這讓人覺得對(duì)象就像是結(jié)構(gòu)精巧的數(shù)組.
Private(私有)成員只在類的內(nèi)部可見. 你不能在一個(gè)private屬性所在的類方法之外改變或讀取它的值. 同樣地,只有在同一個(gè)類中的方法可以調(diào)用一個(gè)private方法. 繼承的子類也不能訪問父類中的private 成員.
要注意,類中的任何成員和類的實(shí)例都可以訪問private成員. 看例子6.8,equals方法將兩個(gè)widget進(jìn)行比較.==運(yùn)算符比較同一個(gè)類的兩個(gè)對(duì)象,但這個(gè)例子中每個(gè)對(duì)象實(shí)例都有唯一的ID.equals 方法只比較name和price. 注意equals方法如何訪問另一個(gè)Widget實(shí)例的private屬性. Java和C都允許這樣的操作.
Listing 6.8 Private members
<?php
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 檢查兩個(gè)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<br>n");
}
//FALSE
if($w1->equals($w3))
{
print("w1 and w3 are the same<br>n");
}
//FALSE, == includes id in comparison
if($w1 == $w2) file://不等,因?yàn)镮D不同
{
print("w1 and w2 are the same<br>n");
}
?> 一個(gè)子類可能改變通過覆寫父類方法來改變方法的訪問方式,盡管如此,仍然有一些限制. 如果你覆寫了一個(gè)public類成員,他子類中必須保持public. 如果你覆寫了一個(gè)protected成員,它可保持protected或變成public.Private成員仍然只在當(dāng)前類中可見. 聲明一個(gè)與父類的private成員同名的成員將簡單地在當(dāng)前類中建立一個(gè)與原來不同的成員. 因此,在技術(shù)上你不能覆寫一個(gè)private成員.
Final關(guān)鍵字是限制訪問成員方法的另一個(gè)方法. 子類不能覆寫父類中標(biāo)識(shí)為final的方法. Final關(guān)鍵字不能用于屬性. //haohappy注:php5的面向?qū)ο竽P腿匀徊粔蛲晟?如final不像Java中那樣對(duì)Data,Method甚至Class都可以用。
php技術(shù):第八節(jié) 訪問方式 [8],轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。