自动加载数据库类

时间:2009-09-13 12:28:28

标签: php database oop

  • 我可以避免在Names对象中实例化Db对象来进行访问吗?
  • __autoload会为此工作吗?
  • 还有其他智能解决方案吗?

我有以下课程(它们是概念性的,因此如果执行它们将无法工作):

Db {
    function connect($config) {
        // connect to data base
    }
    function query($query) {
        // Process a query
    }
}
Names {
    function show_names($query) {
        $Db = new Db(); // Is it possible to autoload this object?
        $Db->query(query);
        // Print data
    }
}

2 个答案:

答案 0 :(得分:2)

通常用于与数据库连接相关的类的解决方案是使用Singleton Design Patternexample of implementation in PHP)。

它允许有一个类来封装与DB的连接,并确保在PHP脚本的生命周期内只打开一个连接 - 永远不会更多。

这将允许您使用这样的语法:

$db = Db::getInstance();
$db->query('...');

或者:

Db::getInstance()->query('...');


关于自动加载:它可以工作,只要:有一种方法可以将类的名称映射到文件。

答案 1 :(得分:2)

可以自动加载类,但必须实例化对象。看来你的问题是试图使这两个类更加松散耦合。可能最简单的解决方案是使用Singleton设计模式。但是,它不是最佳解决方案,因为您可能决定拥有多个数据库连接,并且在单元测试中也会出现问题。我建议看看Dependency Injection的概念,它更复杂,但更灵活。