为什么它不起作用? 我想创建单例连接到db,autoloader,路由器。
static $singleton = null;
public function __construct(){
if(empty(self::$singleton)){
self::$singleton = new self;
return self::$singleton;
}
return self::$singleton;
}
答案 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()
多少次,对象都应该只创建一次。