关于PHP类中数据库连接的建议

关于PHP类中数据库连接的建议,php,database,oop,class,Php,Database,Oop,Class,我正在玩OOP编程,遇到了一个我可以使用建议的障碍 我有一个嵌套类的情况。我有一个“Company”类,它包含一个名为people的数组。此数组包含“Person”类的多个实例 “公司”和“个人”的数据都存储在数据库中,相关类在需要时从该数据库检索信息 我的问题很简单:“我在什么时候连接到数据库?”- a) 首先在我的PHP页面中连接,然后将连接传递给“Company”实例供其使用。 b) 将用户名、密码等直接放在“Company”类中并连接到那里 我原以为后者会创建到数据库的多个连接——每个“

我正在玩OOP编程,遇到了一个我可以使用建议的障碍

我有一个嵌套类的情况。我有一个“Company”类,它包含一个名为people的数组。此数组包含“Person”类的多个实例

“公司”和“个人”的数据都存储在数据库中,相关类在需要时从该数据库检索信息

我的问题很简单:“我在什么时候连接到数据库?”- a) 首先在我的PHP页面中连接,然后将连接传递给“Company”实例供其使用。 b) 将用户名、密码等直接放在“Company”类中并连接到那里

我原以为后者会创建到数据库的多个连接——每个“公司”实例一个连接——所以答案可能是“A”。但是,如果我要将这个类传递给另一个开发人员(这只是一个学习练习,所以不是我计划要做的事情),他必须自己连接到数据库,而不允许我的类为他做这件事

在这两种情况下,连接是自动传递给“Person”类的每个实例,还是每次创建新实例时都必须传递连接

我对此做了一些研究,我认为答案是“A”(连接到我的PHP页面中的数据库,并将连接传递到Company类的每个实例),但我认为我应该在走得太远之前仔细检查一下


谢谢您提供的任何建议。

您的解决方案A)听起来我很熟悉。这样,您就可以将数据库连接传递给对象,或者维护一个全局注册表来将连接对象(例如PDO)存储到中。

我认为您的做法是正确的

你所描述的是众所周知的,使用它通常是一个好主意

当您处理更复杂的项目时,完全抽象数据检索可能是一个好主意。创建一个接口,即“PersonFinder”或“CompanyFinder”,它只处理相关记录的查找和检索。该接口的具体实现可能包括数据库查找、CSV文件查找,甚至是某种基于web的服务查找。在创建公司或个人对象时,将查找器传递到这些对象中

通过这种方式,您可以轻松更改查找记录的方式,而无需更改处理记录的代码