class Widget
{
私人$id;
公共函數 __construct($name, $price)
{
$this->name = $name; $this->id = uniqid();
}
//檢查兩個小部件是否相同,檢查兩個小部件是否相同
public function equals($widget)
widget->名稱) AND
($this->價格 == $widget->價格)); $w2 = new Widget('Cog', 5.00);
$w3 = new Widget('Gear', 7.00);
//TRUE {
print("w1 且w2 相同
n");
}
//FALSE }
//FALSE }
//FALSE } {
print("w1 和w3 相同
n");
}
//FALSE, == 在比較中包含id ID 不同
{
print("w1 與 w2是相同的
n」);
>
如果你對物件導向程式設計不熟悉,你可能想知道用private成員的目的是什麼. 你可以回憶一下封裝和耦合的想法,這在本章開頭我們有討論過. Private成員有助於封裝資料. 他們可以隱藏在一個類別內部而不被類別外部的程式碼接觸到. 同時他們還有助於實現鬆散的耦合. 如果資料結構外的程式碼不能直接存取內部屬性,那麼就不會產生一個隱性的關聯性.
當然,大部分private屬性仍然可以被外部程式碼共用. 解決方法是用一對public方法,一個是get(取得屬性的值),另一個是set(設定屬性的值). 建構子也接受屬性的初始值. 這使得成員間的交流通過一個狹窄的,經過良好限定的接口來進行. 這也提供改變傳遞給方法的值的機會. 注意在例子6.8中,構造函數如何強制使price成為一個float數(floadval()).
Protected(受保護的) 成員能被同一個類別中的所有方法和繼承出的類別的中所有方法存取到. Public屬性有違封裝的精神,因為它們允許子類別依賴一個特定的屬性來書寫.protected方法則不會帶來這方面的擔憂.一個使用protected方法的子類別需要很清楚它的父類別的結構才行.
範例6.9由範例6.8改進而得到,包含了一個Widget的子類別Thing. 注意Widget現在有一個叫作getName的protected方法. 如果Widget的實例試圖調用protected方法將會出錯: $w1->getName()產生了錯誤. 但子類別Thing中的getName方法可以呼叫這個protected方法.當然對於證明Widget::getName方法是protected,這個例子顯得過於簡單. 在實際情況下,使用protected方法要依賴於對對象的內部結構的理解.
Listing 6.9 Protected members
複製程式碼 程式碼如下:
class Widget
{
私人$id;
公共函數 __construct($name, $price)
{
$this->name = $name; $this->id = uniqid();
}
//檢查兩個小工具是否相同
public function equals($widget)
get->姓名)AND
($this ->price == $widget->price));
}
return($this->name);
}
}
類Thing 擴充 Widget
{
private {
$this->color = $color;
🎜> 公用函數getColor()
{
公用函數getName()
{
);
}
}
$w1 = new Widget('Cog', $w1 = new Widget('Cog', 5.00), 5. .00);
$w2->setColor ('黃色');
//TRUE (仍為! ) 結果仍為真
if($w1->equals($w2))
{
//print Cog 輸出 Cog
print($w2->getName());
? >
一個子類別可能改變透過覆寫父類別方法來改變方法的存取方式,儘管如此,仍然有一些限制. 如果你覆寫了一個public類別成員,他子類別中必須保持public. 如果你覆寫了一個protected成員,它可保持protected或變成public.Private成員仍然只在當前類中可見. 聲明一個與父類的private成員同名的成員將簡單地在當前類中建立一個與原來不同的成員. 因此,在技術上你不能覆蓋一個private成員.
Final關鍵字是限制訪問成員方法的另一個方法. 子類不能覆蓋父類中標識為final的方法. Final關鍵字不能用於屬性.
http://www.bkjia.com/PHPjc/316944.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/316944.htmlTechArticle/* ---------------------- -------------------------------------------------- ------- |=本文為Haohappy讀CorePHPProgramming |=中ClassesandObjects一章的筆記|=翻譯為主個人...