PHP用MYSQLI连接数据库,想法是自己写一个类,单例化。于是按照单例模式的思路把类的构造函数私有化了在构造函数中将类的一个私有属性$conn实例化一个mysqli对象然后再声明一个静态方法检查该类的另外一个私有静态属性$db有没有实例化,有就直接返回,没有就利用构造函数实例化一个mysqli对象赋值给到私有静态属性$db。class Mysql_con
{
    private $host = MYSQL_HOST;
    private $name = MYSQL_USER;
    private $pass = MYSQL_PASSWORD;
    private $dbname = MYSQL_DATABASE;
    private $conn ;
    private static $db;//数据库句柄名    //私有化类的实例方法
    private function __construct(){
       return $this->conn = new mysqli($this->host,$this->name,$this->pass,$this->dbname);
    }
    private function __clone(){}    //单例化
    public static function get_db()
    {
        if(self::$db instanceof self){
            return self::$db;
        }else{
            return self::$db = new self;
        }
    }    //查询
    public function query(){
        echo $this->conn->query('select * from user');
    }
}问题来了,按照设想,我的私有静态属性$db应该是一个mysqli对象,但是在下面调用mysqli的query方法时,报错说没有设置该方法
Fatal error: Call to undefined method Mysql_con::query() in D:AppServwwwrsclassUser.class.php on line 24我理解为PHP并把有把$db看作是一个mysqli对象,而是作为一个自定义的类对象来看待,如果我想要query我必须重新定义新类的query方法,定义的时候又必须调用mysqli对象的query方法,于是就进入了死循环。30岁了,脑子确定没以前好使。另外请问一下,单例模式适合用来设计数据库连接类吗? 仅针对PHP来说。 有人说单例模式可能会造成多个查询需要一个一个的等待。 但是又有人说PHP的进程是页面级别的,你每个页面相当于单独一个进程,一个进程只能实例化一个单例模式的类对象。那多个用户就是每个用户都有一个单例模式的对象。
我头都要爆了