从函数内部进行SQL调用

时间:2011-08-19 13:44:09

标签: php sql mdb2

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

现在看来,在调用funcA的地方,调用例程将已经连接的MDB2对象指针传递给它。这很好。

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

2 个答案:

答案 0 :(得分:1)

有些人可能会称之为不好的做法,但在这种情况下,解决方案可能是Registry patternSingleton 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)

“最佳实践”是几乎无法定义的事情之一。但是,在我看来,函数依赖于其他东西,最好将该依赖项传递给函数 - 正如您现在所做的那样。

这使您的函数可以执行任何操作,而无需担心查找和连接到数据库。它还允许您使用虚拟数据库测试您的功能。

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