2009-09-11 49 views
3

我正在學習有關OO和類,我在PHP幾個關於面向對象的問題和類夫婦約於二OO PHP的問題和類

  1. 據我瞭解,擴展另一個類的類僅僅意味着擴展其他類的類可以訪問變量/屬性以及它所擴展的類的函數/方法。它是否正確?

  2. 我知道一個靜態方法或屬性基本上與一個類之外的過程函數或變量相同,幾乎可以在任何地方使用。它是否正確?

  3. 公共意味着任何類都可以訪問它,而私有意味着只有被封裝的類或從可以訪問和使用的所有者擴展的類。它是否正確?

+0

你在問很多很好的問題。保持! – 2009-09-11 03:52:09

回答

11

1)是的,這是正確的。子類繼承其父項的任何protectedpublic屬性和方法。任何聲明的private都不能使用。

2)這是真的。只要該類加載(這與以前的自動加載問題一致),則可以通過作用域分辨率運算符(::)訪問靜態方法,如下所示:ClassName::methodName();

3)您的意思是public正確的,但正如我前面提到的,private方法只能由類使用他們在聲明。

class parentClass 
{ 
    private $x; 
    public $y; 
} 

class childClass extends parentClass 
{  
    public function __construct() { 
     echo $this->x; 
    } 
} 

$z = new childClass(); 

上面的代碼將導致NOTICE錯誤被觸發,如$ x是不是childClass訪問。

公告:未定義的屬性: childClass :: $ X

如果$ X被宣佈protected代替,然後childClass將有機會獲得。編輯:聲明爲protected的屬性可以由聲明該屬性的類以及由其擴展它的任何子類訪問,否則,不屬於「外部世界」。這是介於publicprivate之間的一個很好的中間值。

+0

好的謝謝你的澄清,我明白現在除了保護,現在所有我需要了解 – JasonDavis 2009-09-11 03:43:24

+0

+1 - 我喜歡你提到關於受保護關鍵字的事實。我想回答這個問題,但是當你有這樣一個奇妙的答案時,我想,問題是什麼。 2009-09-11 03:44:59

+0

借調,我也喜歡這個答案。我也喜歡@jasondavis提出了很多關於面向對象的好問題。 – karim79 2009-09-11 03:47:43

-2

很少需要聲明任何私有內容,因爲一般情況下使用protected來代替。

+0

Private是一個非常重要的數據隱藏機制。數據隱藏功能可以實現更可靠的程序,因爲您可以確保除了您(編寫該類)之外的其他人無法直接訪問該屬性。 – NawaMan 2009-09-11 04:12:49

+0

我沒有說私有財產/方法沒有用處,關鍵是在絕大多數情況下你想使用保護。您的類越可擴展,您的代碼可重用性就越高。 – Klas 2009-09-11 04:58:19

0

For 1.據我所知,擴展另一個類的類只是意味着擴展其他類的類可以訪問變量/屬性以及它所擴展的類的函數/方法。它是否正確?

ANS:這是正確的,但並非全部。擴展類還可以通過重寫擴展類的方法來定製擴展類。而且,它還可以通過添加新的字段和方法來擴展超類功能。

對於2.我知道一個靜態方法或屬性基本上與一個類之外的過程函數或變量相同,幾乎可以在任何地方使用。它是否正確?

ANS:是的,這是正確的,只要類是公開的並且加載並且屬性和方法是公共的,只要類是公開的。換句話說,你使用這個類作爲這些元素的名字空間。

對於3.公共意味着任何類都可以訪問它,而私有意味着只有被封裝的類或從可以訪問和使用的所有者擴展的類。它是否正確?

ANS:將其視爲物理屬性,公共計算機(在圖書館)可供所有人使用,並且您的私人計算機(可以勉強)只能由您使用。

只是添加到Zambat評論。