PDO使用类连接到db

时间:2014-12-26 18:08:17

标签: php mysql pdo

我正在制作PDO系统并遇到问题/疑问。我会为我的代码,用户,产品等制作多个课程。我想知道连接。我在我的一个课程中有这个:

class Database
{
    private $_db;

    function __construct($db)
    {    
        $this->_db = $db;
    }
}

$db来自配置文件,我也加载了所有类。现在的问题是:

我是否必须在所有类中创建相同的函数,或者我可以只使用适用于我所有类的“数据库”类?

1 个答案:

答案 0 :(得分:0)

不,你不必(and shouldn't)为每个班级反复创建相同的功能。这使得维护您的应用程序非常困难。

请尝试以下方法之一:

1。依赖注入

您可以使用依赖注入来执行此操作。这是非常情绪化的,可能不是你想要的,但我还是认为我还是把它放在这里。

假设如下:

class Database
{
    /**
     * @var PDO
     */
    private $db;

    public function __construct(PDO $db)
    {
        $this->db = $db;
    }
}

class User
{
    /**
     * @var Database
     */
    private $db;

    // Here we inject a Database object (as hinted by Database $db) into the current instance
    public function __construct(Database $db)
    {
        $this->db = $db
    }
}

try
{
    $pdo = new PDO(...);
    $db = new Database($pdo);
}

catch(PDOException $ex)
{
    // Could not connect to database or some other error message
}



// Inject $db in the user class
$user = new User($db);

2。单

您可以将数据库类设为单例,然后静态调用它。这可能更符合您的需求。

class Database
{
    /**
     * @var Database
     */
    private static $instance;

    /**
     * @var PDO
     */
    private $db;

    protected function __construct(PDO $db)
    {
        $this->db = $db;
    }

    // You'd call this in your config
    public static function initialize(PDO $db)
    {
        if(self::$instance == null)
        {
            // Create a new instance of this class
            self::$instance = new self($db);
        }
    }

    // Get the instance
    public static function getInstance()
    {
        return self::$instance;
    }

    // Do something
    public function doSomething()
    {
        // Do something
        echo "Foo";
    }
}

class User
{
    public function doSomething()
    {
        // This would print "Foo"
        Database::instance()->doSomething();
    }
}

try
{
    $db = new PDO(...);
}

catch(PDOException $ex)
{
    // Could not connect to database or some other error message
}

Database::initialize($db);

$user = new User();

希望这有帮助。