我有以下课程(它们是概念性的,因此如果执行它们将无法工作):
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
}
}
答案 0 :(得分:2)
通常用于与数据库连接相关的类的解决方案是使用Singleton Design Pattern(example of implementation in PHP)。
它允许有一个类来封装与DB的连接,并确保在PHP脚本的生命周期内只打开一个连接 - 永远不会更多。
这将允许您使用这样的语法:
$db = Db::getInstance();
$db->query('...');
或者:
Db::getInstance()->query('...');
关于自动加载:它可以工作,只要:有一种方法可以将类的名称映射到文件。
答案 1 :(得分:2)
可以自动加载类,但必须实例化对象。看来你的问题是试图使这两个类更加松散耦合。可能最简单的解决方案是使用Singleton设计模式。但是,它不是最佳解决方案,因为您可能决定拥有多个数据库连接,并且在单元测试中也会出现问题。我建议看看Dependency Injection的概念,它更复杂,但更灵活。