【发布时间】:2012-03-30 06:23:08
【问题描述】:
我是 OOP 的新手。最初我是在类内和构造函数外定义变量并为它们赋值,但今天在 Java 的 OOP 课程之后,有人告诉我这是不好的风格,应该避免。
这是我模拟的原始 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?
【问题讨论】:
-
让我们暂时忘记 OOP。主机、用户、密码和数据库名的值不应该存储在配置文件中吗?
-
@Aaron,检查我更新的答案。我添加了一些项目供您在设置中考虑。
-
@JoniSalonen,谁在乎它们的存储位置?关键是它们应该在构造函数中作为参数传递。
-
@tereško 用户关心。在这两个示例中,连接数据都被硬编码在程序代码中。通常要求应从用户友好的配置文件中读取此类数据。这意味着数据库单元必须读取和解析文件,或者您需要不同的单元来执行此操作。如果您使用不同的单元,则必须设计这些单元之间的接口。另一方面,如果连接数据可以在程序中硬编码,则不需要任何这样的接口。
-
@JoniSalonen,你是在暗示
DatabaseConnection类应该知道配置吗?
标签: php oop class database-connection