数据库类连接到我的其他类

时间:2015-01-10 17:13:09

标签: php database mysqli

我正在关注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))

我知道它看起来并不好,但我真的不知道如何进一步改进它。我很感激你们的一些建议

1 个答案:

答案 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足够智能以处理多个连接。寻求灵感:)