我有一個關於單身人士設計模式的問題。 當我們爲我們的類應用單例時,我們需要將類的構造函數設置爲私有的,以便我們不能正常地實例化類,但是我們也在類上下文中實例化它(如果我們需要的對象不存在)。問題是爲什麼私人構造函數阻止我們在類上下文中實例化類?單身人士設計模式在PHP
回答
可見性修飾符用於指定誰可以信任與此方法或屬性交互。這個想法是,每種方法和財產都有特定的目的,應該以特定的方式使用;例如某些方法只能在特定時間調用,某些屬性只能設置爲某些值。如果每個方法和屬性都是public
,那麼任何代碼都可以隨時與它進行交互,即使它不能「正確」執行。爲了最大限度地減少由此導致的問題,可視性可以僅限於一類(protected
)或僅限於一個具體類(private
)。
這種交互是在static
還是對象上下文中,或者它是「當前」對象還是它的另一個實例都沒有區別。預計該類將被「限定」與該方法正確交互,因此可以這樣做。這可能會根據這一理念令你感到驚訝,但即使這樣工作得很好:
class Foo {
private $bar;
public static baz() {
$obj = new Foo;
$obj->bar = 42;
}
}
類是沒有操縱$this
,它的操縱自身的實例的private
財產,這是允許的。所以調用它自己的構造函數。
如果某個類的方法設置爲private,則不能在子類外部訪問它,也不能在子類中訪問它,但只能在該特定類中使用私有方法。 __construct()沒有什麼不同,當你將__construct()設置爲private時,你不能在類之外訪問__construct()。當我們實例化一個類的對象時,PHP會自動調用它的構造函數..如果設置爲private,則會阻止實例化一個新對象。但是..如果我們實例化一個類的對象 - 在那個類中,PHP試圖調用__construct()&沒有什麼阻止它在那裏..
我希望我能夠清楚您。 :)
謝謝你的回答:) –
- 1. 設計模式:具有設置功能的單身人士
- 2. 狀態設計模式,但避免單身人士
- 3. 我的單身人士模板真的是單身人士嗎?
- 4. 在PHP中使用單身人士
- 5. 帶AJAX初始化程序設計模式的javascriptMVC單身人士
- 6. 單身人士在di.dart
- 7. 由Singleton包裝的單身人士或非單身人士
- 8. C#:單身人士使用單身人士
- 9. 爲什麼java.lang.Runtime是單身人士?單身人士的要求?
- 10. PHP單身人士數據庫限制
- 11. 骨幹模型是單身人士嗎?
- 12. 在PHP5中與工廠模式結合的單身人士
- 13. 單身人士破壞者
- 14. 繼承單身人士
- 15. NSMutableDictionary單身人士問題
- 16. RequireJS中的單身人士
- 17. 單身人士濫用?
- 18. 單身人士和範圍
- 19. RavenDB的單身人士DocumentStore
- 20. 使用QtConcurrent單身人士
- 21. 單身人士 - 未定義?
- 22. Embeded RavenDb的單身人士
- 23. 假FakeItEasy單身人士
- 24. ThreadLocal與單身人士
- 25. 提升單身人士
- 26. ASP.NET中的單身人士
- 27. MIDlet作爲單身人士
- 28. servlet是單身人士嗎?
- 29. Python中的單身人士
- 30. AFNetworking和單身人士
當方法或屬性的可見性設置爲_private_時,誰可以訪問它?它不需要_私人_一定,_protected_也可以,這取決於設計和目的。 – dbf