正确的方法为类创建PDO连接

时间:2013-11-01 12:02:29

标签: php mysql pdo connection

这是制作PDO连接的正确方法。

我有不同的类(每个类都有自己的文件)然后有配置文件包含PDO对象和所有类对象。我正确地做了或者有更好的练习。

classA.php

class classA {

    private $PDO;

    function __construct($PDO) { 
        $this->PDO = $PDO;
    }
    //other functions
}

classB.php

class classB {

    private $PDO;

    function __construct($PDO) { 
        $this->PDO = $PDO;
    }
    //other functions
}

classC.php

class classC {

    private $PDO;

    function __construct($PDO) { 
        $this->PDO = $PDO;
    }
    //other functions
}

在config.php页面中:

include_once("db.php"); //contains db variables values
try
{
    $PDO = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password, $options);
}
catch(PDOException $ex)
{
    die("Failed to connect database: " . $ex->getMessage());
}

require 'classA.php';
require 'classB.php';
require 'classC.php';

$objA = new classA($PDO);
$objB = new classB($PDO);
$objC = new classC($PDO);

几乎每一页都包含config.php。

2 个答案:

答案 0 :(得分:2)

简短:是的,这是正确的,但并不完美。

我认为你做得对。它被称为Dependency Injection

但您的代码有重复项(DRY!)。你可以使用继承来避免它。

另外。如果你只想“死”,就不要捕捉异常。

  

几乎每一页都包含config.php。

如果你做central point of entry会更好。 Front contoller pattern

答案 1 :(得分:0)

根据您的情况,您的方法很好。 (不是前置控制器模式)

避免使用单例,因为依赖注入是干净且可维护的。

即使是单身人士模式的发明者之一埃里希·伽马,现在也对这种模式表示怀疑:

"I'm in favor of dropping Singleton. Its use is almost always a design smell"