我有一个在多个地方使用的PHP函数(称之为funcA),因此我将funcA(和一些相关函数)放在一个单独的文件中,require
d在其他PHP文件中。 funcA对已经打开并由调用它的代码使用的数据库进行大量查询。这些查询是通过MDB2对象完成的。
现在看来,在调用funcA的地方,调用例程将已经连接的MDB2对象指针传递给它。这很好。
我想知道的是,如果通过不传递MDB2object指针而不是使用funcA require
MDB2并使用自己的mdb2对象连接到数据库来使funcA完全自包含会更好。这是更多的内存,更多的CPU周期和更多的网络流量,但这是一种更好的做法吗?
答案 0 :(得分:1)
有些人可能会称之为不好的做法,但在这种情况下,解决方案可能是Registry pattern或Singleton PDO class。
我不想开始讨论单身人士或注册管理机构的是非,但在这种情况下,它可能是最简洁的解决方案,不涉及重构你的大部分申请。
一些非常基本的例子(你应该仔细阅读上面的链接,因为理解这些模式可以节省你很多时间和麻烦)
// 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');
// ...
}
答案 1 :(得分:1)
“最佳实践”是几乎无法定义的事情之一。但是,在我看来,函数依赖于其他东西,最好将该依赖项传递给函数 - 正如您现在所做的那样。
这使您的函数可以执行任何操作,而无需担心查找和连接到数据库。它还允许您使用虚拟数据库测试您的功能。
它通常被称为依赖注入,并在面向对象的体系结构中得到广泛推荐。