2

考虑这个示例单例类:

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;
    }
}

在同一类的静态方法中,我能够初始化构造函数私有的类。这是否意味着在尝试实例化类中的对象时,类初始化的范围变为本地?

如果有人可以参考访问修饰符来解释类实例化时 PHP 的行为,我将不胜感激。

4

1 回答 1

4

您只能通过 Model_Acl::getinstance() 对其进行初始化。

但是,是的,它会起作用。

单例不被认为是一种好的做法,您应该考虑依赖注入。

http://fabien.potencier.org/article/11/what-is-dependency-injection

有关 php 单例的更多信息

PHP 单例类的最佳实践

于 2013-02-05T06:18:30.183 回答