在Database类(必须使用单调模式创建)中创建查询功能是一种好习惯。还是最好用数据库接口或类似的方法创建另一个类,并在构造函数中获取数据库实例? (对不起,我的英语:)
<?php
class Database
{
private static $_pdo = null;
private static function getDatabase() {
if (self::$_pdo === null) {
self::$_pdo = new PDO("mysql:host=localhost;dbname=contact_manager", 'root', '');
}
return self::$_pdo;
}
public static function query($query, $parameters) {
Database::_toArray($parameters);
$query = self::getDatabase()->prepare($query);
$query->execute($parameters);
$result = $query->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
private static function _toArray(&$parameters) {
if (!is_array($parameters)) {
$parameters = array($parameters);
}
}
private function __construct() { }
private function __clone() { }
private function __wakeup() { }
}
?>
答案 0 :(得分:2)
这是一个非常广泛的主题,无论它是否是好的做法。至于我,可能会有一些观点。
如果您不打算将项目扩展到另一个数据库,则应通过相同的界面调用查询-此解决方案是可以的
如果从SOLID的角度来看这是一个错误的决定。根据SOLID,您必须将数据库连接与查询分开。这是因为D原理(依赖倒置)+ S原理(单一职责)。另外,您还必须定义自己的DatabaseInterface
,将其用于将连接注入到Repositories
-封装数据库查询的类中。
但是,此决定还取决于项目的大小和目标。如果您只是想让所有事情都做对,而不是发明自己的全新自行车,只需采用Symfony或Laravel之类的框架,而忽略这些低级的东西。