0

我有一个在多个地方使用的 PHP 函数(称为 funcA),因此我将 funcA(和一些相关函数)放在一个单独的文件中,该文件require位于其他 PHP 文件中。funcA 对已经打开并由调用它的代码使用的数据库进行大量查询。这些查询是通过 MDB2 对象完成的。

就目前而言,在调用 funcA 的地方,调用例程将一个已经连接的 MDB2 对象指针传递给它。这工作正常。

我想知道的是,通过不传递 MDB2object 指针而是让 funcA requireMDB2 并使用它自己的 mdb2 对象连接到数据库来使 funcA 完全自包含是否会更好。它需要更多的内存、更多的 CPU 周期和更多的网络流量,但这是更好的做法吗?

4

2 回答 2

1

“最佳实践”是几乎无法定义的事物之一。但是,在我看来,如果一个函数依赖于其他东西,最好将这种依赖传递给函数——就像你现在所做的那样。

这使您的函数可以做任何事情,而不必担心查找和连接到数据库。它还允许您使用虚拟数据库测试您的功能。

它通常被称为依赖注入,在面向对象的体系结构中被广泛推荐。

于 2011-08-19T13:54:12.363 回答
1

有些人可能也称其为不好的做法,但这种情况下的解决方案可能是注册表模式Singleton PDO 类

我不想就单例或注册表的正确与错误展开整个讨论,但在这种情况下,它可能是最干净的解决方案,不涉及重构大部分应用程序。


一些非常基本的示例(您应该认真阅读上面的链接,因为了解这些模式可以为您节省大量时间和麻烦)

// Singleton class MyPDO
// This assumes you have a singleton class extending PDO somewhere included or required
function funcA(){
    $database = MyPDO::getInstance();
    // ...
}

// Registry pattern
// This assumes that somewhere during your bootstrapping you create an 
// instance of PDO and store it in the registry so you can retrieve it 
// anywhere else later
function funcA(){
    $database = Registry::get('Database');
    // ...
}
于 2011-08-19T13:50:52.617 回答