我正在关注MVC OOP结构,我想知道一个体面的数据库类是什么样的。数据库类的目的是让其他类调用其方法或扩展它。
这就是我的connection.php现在的样子
<?php
$db = new mysqli('localhost', 'root', '', 'audiologiska_kliniken');
if($db->connect_errno > 0){
die('Ett fel inträffade [' . $db->connect_error . ']');
}
这是我开始的数据库类。
<?php
include 'C:/wamp/www/mvc/include/connect.php';
class Database
{
private $host;
private $user;
private $password;
private $database;
function __construct{
// if(file_exists($filename)) {include '';}
//else throw new exception("Error!");
$this->host=$host;
$this->user=$user;
$this->password=$password;
$this->database=$database;
$this->connect();
}
private function connect()
{//Connect to the server
if(!mysqli_connect($this->host, $this->user, $this->password, $this->database))
我知道它看起来并不好,但我真的不知道如何进一步改进它。我很感激你们的一些建议
答案 0 :(得分:0)
正如Halcyon所提到的,请研究使用作曲家或您自己的spl_autoload函数进行名称空间自动加载。
你也应该对其他设计模式进行调查。
单例模式通常用于防止每个请求/响应周期加载多个数据库连接。
这样,每当您需要数据库连接时,您都可以执行类似
的操作$db = DB::getInstance();
如果以前没有创建过该类或现有连接,则会返回一个新的连接实例。
通过实现__cloned魔术方法来阻止人们克隆实例也是一个好主意:
public function __clone() {
throw new Exception("Can't clone a singleton");
}
然而人们认为单身人士很糟糕,因为他们将全局状态和紧密耦合引入应用程序。这使他们很难测试。另一种方法是查看可能使用的服务,这应该是应用程序中的全局服务。
http://fabien.potencier.org/article/11/what-is-dependency-injection Symfony有一个很好的使用服务和依赖注入容器的方法。
Laravel在IoC Container中也有一个很好的依赖注入容器示例。它是管理类解析的单个类。该框架调用其服务ServiceProviders。
这样的工作有很多优点,例如测试的简易性和应用程序中对象之间的松散耦合。
https://github.com/illuminate/database特别是Connection.php和ConnectionResolver.php是实现数据库连接的一种方式。 Connection.php表示实际连接,每次使用工厂模式创建,ConnectionResolver足够智能以处理多个连接。寻求灵感:)