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

时间:2011-07-24 14:05:18

标签: php oop

我对OOP(以及PHP编程)都很陌生,我在使用对象和使用db数据(我的情况下是MySql,但这无关紧要)时遇到了一些麻烦。

我在数据库上有一个表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 PHP -

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

工厂方法总是合理的,那么您可以实现优化的通用查询:

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

翻译成

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