我对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 );