php 构造函数中的单例

k5hmc34c  于 2023-08-02  发布在  PHP
关注(0)|答案(3)|浏览(125)

为什么不工作我想为连接到数据库,自动加载器,路由器创建单例。

static $singleton = null;

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

字符串

cetgtptt

cetgtptt1#

在php方法中__construct总是返回类的示例,你不能操作返回的值。
要做你想做的事情,你应该使用private __contruct()并创建下一个方法,例如public static getInstance():

static $singleton = null;

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

字符串

pvabu6sv

pvabu6sv2#

这是一种方法:

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

}

字符串

ybzsozfc

ybzsozfc3#

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

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

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

相关问题