<?php
class DB
{
private static $instance;
private function __construct(){
self::$instance = new PDO("mysql:host=localhost;dbname=test;charset=utf8","root","root");
}
public static function getInstance(){
if ( !self::$instance instanceof self ) {
self::$instance = new self();
}
return self::$instance;
}
private function __clone(){}
}
$test1 = DB::getInstance();
var_dump( $test1 );
在$test1 = DB::getInstance()第一次调用这个时候,$instance没有任何属性,触发 self::$instance = new self();然后触发构造函数,为什么返回的是一个DB的实例,而不是一个PDO实例
6 个解决方案
#1
为什么会是 PDO 实例?
#2
self 中文释义:自己
在你的代码中 self 就是 DB
if ( !self::$instance instanceof self ) { 如果不是 DB 的实例
self::$instance = new self(); 则实例化 DB
}
没有看到能残生误解的地方
在你的代码中 self 就是 DB
if ( !self::$instance instanceof self ) { 如果不是 DB 的实例
self::$instance = new self(); 则实例化 DB
}
没有看到能残生误解的地方
#3
里面有个构造方法啊,做了一个PDO的实例化,赋值给了instantce,难道在new DB()不会触发吗?
#4
里面有个构造方法啊,做了一个PDO的实例化,赋值给了instantce,难道在new DB()不会触发吗?
#5
先后对同一变量赋值,变量的值自然是最后赋予的那个
#6
至少得写作
public static function getInstance(){
if ( !self::$instance instanceof PDO ) {
new self();
}
return self::$instance;
}
#1
为什么会是 PDO 实例?
#2
self 中文释义:自己
在你的代码中 self 就是 DB
if ( !self::$instance instanceof self ) { 如果不是 DB 的实例
self::$instance = new self(); 则实例化 DB
}
没有看到能残生误解的地方
在你的代码中 self 就是 DB
if ( !self::$instance instanceof self ) { 如果不是 DB 的实例
self::$instance = new self(); 则实例化 DB
}
没有看到能残生误解的地方
#3
里面有个构造方法啊,做了一个PDO的实例化,赋值给了instantce,难道在new DB()不会触发吗?
#4
里面有个构造方法啊,做了一个PDO的实例化,赋值给了instantce,难道在new DB()不会触发吗?
#5
先后对同一变量赋值,变量的值自然是最后赋予的那个
#6
至少得写作
public static function getInstance(){
if ( !self::$instance instanceof PDO ) {
new self();
}
return self::$instance;
}