我有一个关于单身人士设计模式的问题。 当我们为我们的类应用单例时,我们需要将类的构造函数设置为私有的,以便我们不能正常地实例化类,但是我们也在类上下文中实例化它(如果我们需要的对象不存在)。问题是为什么私人构造函数阻止我们在类上下文中实例化类?单身人士设计模式在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