2011-05-08 44 views
0

是否有可能做這樣的事情:如何保護類屬性免於在PHP中擴展類?

class foo { 
    private $private = 'A'; 
} 

class bar extends foo { 
    echo $this->private; 
} 

bar returns null... 

我真的很喜歡它,如果變量$私人不是由子類訪問,但我不能確定的是它甚至有可能僅僅基於基於分類的發展範式。

私有財產不提供我正在尋找的功能。

我明白,這是不準確的PHP代碼,但它只是一個例子)

回答

2

這是怎麼回事已經工作。請參閱documentation

屬性或方法的可見性可以通過在聲明前加關鍵字public,protected或private來定義。宣佈公開的類成員可以隨處訪問。聲明保護的成員只能在類本身以及繼承類和父類中訪問。 聲明爲private的成員只能由定義成員的類訪問。

在這裏看到一個例子:http://codepad.org/Yz4yjDft

私人性質不提供我正在尋找的功能。

對我來說,它似乎正是你想要的。如果沒有,請詳細說明。

+0

經過一番思考 - 我們的子類沒有寫入父'private'屬性 - 它在該名稱空間中創建了自己的變量,因爲它不知道父變量存在。我們用parent :: $ private來測試它。有趣的小案例測試;) – 2011-05-08 04:25:30

0
class foo { 
    protected $private = 'A'; 
} 

class bar extends foo { 
    function __construct() { 
     echo $this->private; 
    } 
} 
new bar(); 

// will echo 'A' 

你只需要做一個函數內部處理,你不能有迴音只是你類中。

編輯:

保護會讓你只在派生類中使用的變量。如果這是你正在尋找的

+0

什麼版本的PHP做到這一點? – 2011-05-08 02:00:29

+0

對不起,請參閱編輯2 – Ibu 2011-05-08 02:02:22

+0

我們實際上正在尋找隱藏開發人員的一些變量,使用擴展類。獲得批准的答案確實引發了爭議。 – 2011-05-09 06:28:05