2012-02-08 90 views
2

是否有任何創建公共或私有或受保護的類在命名空間就像java?有無論如何定義公共或私人或受保護的類在PHP

像...

namespace foo; 

public class Account { 
    ....... 
} 


private class PrivateAccount { 
....... 
} 

請讓我知道,如果有什麼解決辦法在PHP中做到這一點。

+1

你能解釋一下你想如何使用私有類嗎?爲什麼施加這個限制?請記住,PHP也是一種動態類型語言,因此除了手動檢查之外,您沒有太大的自由來自動對類型施加限制。同樣,你可以手動限制構造函數(通過傳遞一些特殊的字符串或類似的東西),但沒有多少意義。 – 2012-02-08 11:21:31

+0

我想將類的使用限制在命名空間中。至少我想拋出一個錯誤,如果我試圖在這個命名空間之外創建這個類的實例。 – SuVeRa 2012-02-08 11:29:13

+0

也許我應該重申一遍。爲什麼施加這個限制?您不能像使用強類型語言那樣輕鬆地在動態類型語言中強加相同級別的嚴謹性。你最好的辦法是編寫好的文檔和構建你的代碼,以便明確哪些類不應該被搞混。 – 2012-02-08 11:32:07

回答

0

通常,您所做的是聲明該類的構造函數爲private。然後,您可以在類中創建一個單獨的靜態函數,它將執行一些檢查(即檢查名稱空間),並通過調用私有構造函數有條件地返回該類的實例。這通常也是你實現單身人士的方式。

+3

你可以像這樣防止初始化(就像你說的實現一個單例一樣),但是這並不妨礙對象實例被傳遞到命名空間的範圍之外。 – 2012-02-08 11:35:33

3

不,PHP中的類可能不是任何東西,只是公開的,並且是隱式聲明的。從PHP docsclasses in PHP5

基本類定義以關鍵字class,後面跟着類名,然後是一對包圍屬於類的屬性和方法的定義大括號的開始。

將可見性關鍵字放在類的前面可能會導致致命錯誤。

相關問題