PHP OOP:从数据库中检索数据


PHP OOP: retrieve data from database

我对OOP(以及PHP编程)非常陌生,并且我在使用对象和将它们与db数据(在我的情况下是MySql,但这是无关的)接口时遇到了一些麻烦。

我在DB上有一个表USERS。我在PHP代码中声明了一个class User,其中包含了我需要的各种属性和方法。问题是如何将这个连接到db。
我将代码放入构造函数中从db检索数据,因此当我需要处理特定用户时,我只需编写$user = new User($user_id);并开始处理该对象。当我完成后,我在对象上调用一个方法来将数据保存在db上,这工作得很好。

当我需要在单个页面中关于多个用户的数据时,如显示完整的用户列表时,问题就出现了。使用这种方法,当我需要用户列表时,我必须实例化所有对象,这将导致代码生成太多类型为SELECT * FROM users WHERE user_id = ...查询,而不是像在过程代码中那样生成单个查询,例如SELECT Only_needed_fields FROM users WHERE 1 LIMIT 20

对于这样的问题,哪个是正确的OOP方法?在构造函数中检索数据的最佳替代方法是什么?

注意请不要建议使用任何形式的框架-我想在使用抽象层之前学习纯OOP PHP -

您的问题是您没有将应用程序的层分开。您应该做的是使用一个工厂类来实例化处理数据库调用的用户,并让用户类只处理业务逻辑。这也将有助于代码的可测试性。

工厂类可以有两个方法。一个用于加载单个用户并实例化它,另一个用于加载一组用户。

工厂方法总是可行的,然后您可以实现一个优化的公共查询:

list($one, $two) = User::GetMultiple (array( 1, 2 ));
翻译成

SELECT * FROM users WHERE user_id IN ( 1, 2 );