gpt4 book ai didi

PHP:数据库连接类构造方法

转载 作者:行者123 更新时间:2023-12-03 22:51:45 25 4
gpt4 key购买 nike

我是 OOP 的新手。最初我是在类内和构造函数外定义变量并为它们赋值,但今天在 Java 的 OOP 类(class)之后,我被告知这是不好的风格,应该避免。

这是我模拟的原始 PHP 数据库连接类:

class DatabaseConnection {
private $dbHost = "localhost";
private $dbUser = "root";
private $dbPass = "";
private $dbName = "test";

function __construct() {
$connection = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass)
or die("Could not connect to the database:<br />" . mysql_error());
mysql_select_db($this->dbName, $connection)
or die("Database error:<br />" . mysql_error());
}
}

以上是否合适?或者以下是更好的方法?

class DatabaseConnection {
private $dbHost;
private $dbUser;
private $dbPass;
private $dbName;

function __construct() {
$this->dbHost = "localhost";
$this->dbUser = "root";
$this->dbPass = "";
$this->dbName = "test";

$connection = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass)
or die("Could not connect to the database:<br />" . mysql_error());
mysql_select_db($this->dbName, $connection)
or die("Database error:<br />" . mysql_error());
}
}

我应该关注什么以确保我正确理解 OOP?

最佳答案

首先:这是毫无意义的。

您正在为已有 10 多年历史的 mysql_* 函数创建一个对象包装器。此 php 扩展不再维护,弃用过程有 already begun .您不应将此 API 用于 2012 年的任何新项目。

相反,您应该学习如何使用 PDOMySQLi并与 prepared statements 一起工作.

也就是说 .. 让我们看看您的代码:

  • 构造函数应接收创建新实例所需的所有参数,参数不应硬编码在类定义中。如果您需要同时使用两个数据库怎么办?
  • 创建连接后,应将其存储在对象的范围变量中。类似于 $this->connection = mysql_conn...。相反,您将其存储在局部变量中,您在构造函数完成后立即“松散”
  • 您不应该对所有内容都使用private 变量。它们对于将扩展您的原始类(class)的类(class)不可见。除非是有意为之,否则您应该为此选择 protected
  • or die('..') 位最重要。如果连接失败,不要停止整个应用程序。相反,你应该抛出 exception ,然后可以在构造函数之外处理。

关于PHP:数据库连接类构造方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9937953/

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