当前位置: 首页 > 面试题库 >

php单例数据库连接,此代码是不好的做法吗?

孙乐逸
2023-03-14
问题内容

我正在尝试创建一个简单易用的单例类来连接到mysql数据库并执行查询,代码可以正常工作,并且我没有任何问题,但是由于我是OOP的新手,所以我想知道这是否是不是坏习惯。

这是课程

class Database {
private $databaseName = 'dbname';
private $host = 'localhost';
private $user = 'user';
private $password = 'pass'; 
private static $instance; //store the single instance of the database

private function __construct(){
    //This will load only once regardless of how many times the class is called
    $connection = mysql_connect($this->host, $this->user, $this->password) or die (mysql_error());
    $db = mysql_select_db($this->databaseName, $connection) or die(mysql_error()); 
    echo 'DB initiated<br>';
}

//this function makes sure there's only 1 instance of the Database class
public static function getInstance(){
    if(!self::$instance){
        self::$instance = new Database();
    }
    return self::$instance;     
}

public function connect() { 
    //db connection
} 
public function query($query) {
    //queries   
    $sql = mysql_query($query) or die(mysql_error()); 
    return $sql;
}

public function numrows($query) {
    //count number of rows  
    $sql = $this->query($query);
    return mysql_num_rows($sql);
}


}

//Intantiate the class
$database = Database::getInstance();

当我想使用该类时,我会做:

$query = "SELECT * FROM registrations";
echo $database->numrows($query);
$sql = $database->query($query);

问题答案:

单身人士是个坏消息。

  • 他们将全局状态引入程序。大多数程序员应该熟悉为什么全局状态不好。
  • 它们在单例和使用它的任何类之间引入了紧密的耦合。这意味着您不能在不重用单例的情况下重用有问题的类。
  • 它们使依赖单例的类的单元测试成为问题,因为您无法轻松地用模拟替换单例。
  • 它们鼓励类尝试尝试解决自己的依赖关系的编码方式。这很不好,因为它可以降低有关类具有哪些依赖项的清晰度。
  • PHP具有“无共享”架构,这意味着PHP单身人士根本不是真正的单身人士,任何时候都可以存在多个实例(每个打开的请求一个)。
  • 如果您在以后的某个日期突然发现实际需要的资源不止由单例提供的一种资源,会发生什么?这是比您想象的更常见的情况

您最好改用依赖项注入,因为它可以解决上述问题。



 类似资料:
  • 问题内容: 用Java创建单例的最佳方法是什么?数据库连接是否应该是单例连接(单例连接是自动线程安全的)?因为理论上数据库不能被许多用户同时访问。 问题答案: 数据库连接通常不应为单例。 两个原因: 许多数据库驱动程序不是线程安全的。使用单例意味着如果您有多个线程,它们将共享同一连接。单例模式不会给您带来安全感。它仅允许许多线程轻松共享“全局”实例。 就我个人而言,我认为Singleton通常会导

  • 本文向大家介绍PHP连接MySQL数据库操作代码实例解析,包括了PHP连接MySQL数据库操作代码实例解析的使用技巧和注意事项,需要的朋友参考一下 方法一:普通方法(面向过程) 首先,先做出如下假设(也适用与方法二和方法三) 下面是关键步骤: 代码注释已经说明了一切。不过这里还需要做一些补充。 ①在mysql_connect()、mysql_select_db()等函数之前使用@(错误控制运算符)

  • 本文向大家介绍myeclipse中连接mysql数据库示例代码,包括了myeclipse中连接mysql数据库示例代码的使用技巧和注意事项,需要的朋友参考一下 1. 环境配置 下载地址:http://www.mysql.com/downloads/mysql/ 真麻烦,下载的话还需要注册和登录以及填个表。上面的信息还挺全的,乱填的信息也是可以接受的~~ 下载后按提示安装即可,最后设置登录mysql

  • 我正在尝试学习PHP,我正在尝试将一个MySQL数据库与我的PHP代码连接起来,以生成一个提交表单,让我将数据输入到数据库中。我的问题是源代码正在连接,但HTML没有将变量发布到PHP文件。我真的需要点帮助。 这是我的HTML源代码 这是我的PHP源代码

  • 本文向大家介绍Java连接Mysql数据库详细代码实例,包括了Java连接Mysql数据库详细代码实例的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Java连接Mysql数据库详细代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 隔了一段时间没连过数据库,代码都忘记了,网上看了下挺乱的,还是自己记录下好。这里的代码主要是连接数

  • 本文向大家介绍python 连接各类主流数据库的实例代码,包括了python 连接各类主流数据库的实例代码的使用技巧和注意事项,需要的朋友参考一下 本篇博文主要介绍Python连接各种数据库的方法及简单使用 包括关系数据库:sqlite,mysql,mssql 非关系数据库:MongoDB,Redis 代码写的比较清楚,直接上代码 1.连接sqlite 2.连接mysql 2.1使用mysqldb