【发布时间】:2014-01-11 01:03:03
【问题描述】:
我刚刚开始学习面向对象编程的概念,并且我已经用函数编写了这个类。
它工作正常,但我很想知道我是否正确地做到了这一点......
这是我的代码:
class Database{
const DB_HOSTNAME = 'localhost';
const DB_USERNAME = 'root';
const DB_PASSWORD = 'password';
const DB_NAME = 'shop';
protected $_db_connect;
protected $_sql;
protected $_result;
protected $_row;
function db_connect(){
$this->_db_connect = mysql_connect(self::DB_HOSTNAME,self::DB_USERNAME,self::DB_PASSWORD) or die(mysql_error());
}
function slect_db(){
mysql_select_db(self::DB_NAME) or die(mysql_error());
}
function sql(){
$this->_sql = 'SELECT * FROM users';
}
function query(){
$this->_result = mysql_query($this->_sql);
}
function fetch_array(){
while($this->_row = mysql_fetch_array($this->_result)){
$username = $this->_row['user_USERNAME'];
echo "<ul>";
echo "<li>".$username."</li>";
echo "</ul>";
}
}
function db_close(){
mysql_close($this->_db_connect);
}
}
$database = new Database();
$database->db_connect();
$database->slect_db();
$database->sql();
$database->query();
$database->fetch_array();
$database->db_close();
【问题讨论】:
-
Please, don't use
mysql_*functions in new code。它们不再维护and are officially deprecated。看到pink box?改为了解prepared statements,并使用PDO 或MySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial. -
在创建数据库访问时始终使用单例设计模式以获得更好的性能
-
我认为这不适合良好的 OO 设计。考虑到您编写的类并不是特别通用,因为您的数据库连接详细信息只是硬编码的常量。此外,该类可以执行的唯一 SQL 语句是
SELECT * FROM users。这是本意吗?我会考虑用其他包含特定 SQL 的类来扩展这个类,或者让 SQL 函数接受一个 SQL 查询字符串。此外,您的数据库类不应进行视图渲染(在 fetch_array 中)。 en.wikipedia.org/wiki/SOLID_(object-oriented_design) -
这样的问题更适合Code Review Stack Exchange site
标签: php mysql database class oop