考虑这个示例单例类:
class Model_Acl
{
protected static $_instance;
private function __construct($a) {
echo $a;
}
public static function getInstance()
{
if(!isset(self::$_instance)) {
self::$_instance = new Model_Acl('hello world');
}
return self::$_instance;
}
}
在同一个类的静态方法中,我能够初始化构造函数为private的类。这是否意味着在尝试在类中实例化对象时,类初始化的范围变为本地?
如果有人能够通过引用访问修饰符来解释PHP实例化的行为,我将不胜感激。
答案 0 :(得分:4)
您只能通过Model_Acl :: getinstance()初始化它。
但是,它会起作用。
Singleton不被认为是一种好习惯,您应该考虑依赖注入。
http://fabien.potencier.org/article/11/what-is-dependency-injection
有关php Singletons的更多信息