gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 06:56:56 26 4
gpt4 key购买 nike

我正在尝试创建一个简单易用的单例类来连接到 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();

当我想使用我会做的类(class)时:

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

最佳答案

单例是个坏消息。

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

你最好看看 相反,因为它解决了上述问题。

关于php单例数据库连接,这段代码是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9227400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com