我一直在努力改善OOP。我正在编写一个数据库类,它将通过PDO处理简单的数据库连接。现在,我想让它使用不同的变量,如果它是从我的localhost服务器提供的。
请考虑以下代码:
<?php
class Database {
private $host;
private $name;
private $username;
private $password;
public $conn;
if ($_SERVER['SERVER_NAME'] == "localhost") {
$host = "change_to_your_db_host";
$name = "change_to_your_db_name";
$username = "change_to_your_db_username";
$password = "change_to_your_db_password";
}
else {
$host = "change_to_your_db_host";
$name = "change_to_your_db_name";
$username = "change_to_your_db_username";
$password = "change_to_your_db_password";
}
public function connect () {
$this->conn = null;
try {
$this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
}
catch (PDOException $exception) {
echo "Connection error: " . $exception->getMessage();
}
return $this->conn;
}
}
?>
我对一般的课程都很陌生 - 我一直在编写纯粹的基于函数的纯PHP,因为它太长了。
我的问题是:
在类这样的类中使用$ _SERVER变量是否很酷?
在类中使用该条件语句来确定私有变量OK吗?这个类将包含在我通过对象类访问数据库的所有其他脚本中。
是否有一种更有效的方法来写这个,如果有一个被捕获它会引发异常?
我只是想确保我正在做的事情正在向前发展。我已经写了很长时间的PHP了,我想彻底摆脱我过时的和过时的方法。
答案 0 :(得分:1)
您应该在类的__construct()
方法中执行条件声明,如下所示:
<?php
class Database {
private $host;
private $name;
private $username;
private $password;
public $conn;
public function __construct()
{
if ($_SERVER['SERVER_NAME'] == "localhost")
{
$this->host = "change_to_your_db_host";
$this->name = "change_to_your_db_name";
$this->username = "change_to_your_db_username";
$this->password = "change_to_your_db_password";
}
else
{
$this->host = "change_to_your_db_host";
$this->name = "change_to_your_db_name";
$this->username = "change_to_your_db_username";
$this->password = "change_to_your_db_password";
}
}
public function connect () {
$this->conn = null;
try {
$conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
}
catch (PDOException $exception) {
throw $exception // you can throw again this \Exception to handle it in your code using the object
}
$this->conn = $conn;
return $this; // you should return $this so you can chain the object methods. Since $con is public, you can still access it
}
}
- 在类这样的类中使用$ _SERVER变量是否很酷?
醇>
我不明白为什么不。
- 在类中使用该条件语句来确定私有变量OK吗?这个类将包含在我通过对象类访问数据库的所有其他脚本中。
醇>
根据@ MarcB的评论,你不能只在方法的顶层运行代码。
- 是否有一种更有效的方式来编写它,而不是如果一个被捕获它会回应异常?
醇>
是的,再次抛出它,以便您可以使用Database
类在最终代码中处理它。