构造函数中的单例

时间:2014-06-13 11:09:06

标签: php constructor singleton

为什么它不起作用? 我想创建单例连接到db,autoloader,路由器。

static $singleton = null;

public function __construct(){
    if(empty(self::$singleton)){
        self::$singleton = new self;
        return self::$singleton;
    }
    return self::$singleton;
}

3 个答案:

答案 0 :(得分:2)

在php方法中__construct总是返回类的实例,你不能操纵返回的值。

要执行您的意图,您应该使用私有__conctruct()并使用您的代码创建下一个方法,例如public static getInstence():

static $singleton = null;

public function getInstance(){
    if(empty(self::$singleton)){
        $class = get_called_class();
        self::$singleton = new $class;
    }
    return self::$singleton;
}

答案 1 :(得分:1)

这是方式:

class Singleton {

    private static $singleton = null;

    private function __construct() {}
    private function __clone() {}
    private function __sleep() {}
    private function __wakeup() {}

    public static function getInstance(){
        if(empty(self::$singleton)){
            self::$singleton = new self;
            return self::$singleton;
        }
        return self::$singleton;
    }

}

答案 2 :(得分:0)

不要使用构造函数,创建一个单独的方法:

public static function getInstance ()
{
    if (is_null(self::$singleton)) {
        self::$singleton = new self();
    }
    return self::$singleton;
}

在创建对象时调用构造函数 - 在这种情况下,无论调用getInstance()多少次,对象都应该只创建一次。