假设我有以下数据:
// Users Table
+----+-------+----------+
| ID | first | last |
+----+-------+----------+
| 1 | Al | Anderson |
| 2 | Bob | Blakely |
| 3 | Cal | Cambel |
+----+-------+----------+以及下列课程:
// Users.php
class Users {
public $first;
public $last;
...
}我需要从查询结果实例化用户对象,并返回一个对象数组。我不知道哪种方法更好:
静态法
在类文件中封装以下伪代码:
public static function getAll() {
$myUsers = array();
...
foreach ($results as $row) {
$user = new User();
...
$myUsers[] = $user;
}
return $myUsers;
}就这样叫它:
$allUsers = Users::getAll();正则函数
类似于静态方法,但也许我也可以重构其他对象.
function getAll($objType='Users') {
$myArray = new array();
...
return $myArray;
}哪种方式更好?
我喜欢将它封装在类函数中,但是处理静态数据库连接对象更痛苦。我喜欢简单的“帮手”函数,但那只是把OOP抛到一起。我做什么好?
*更新:这不是MySQLi或PDO的事情。我的问题是(从OOP最佳实践的角度来看),在类中放置一个静态的'getAllOfMyself()‘方法更好,还是像'getAllSomethings()’这样的简单函数更好。
发布于 2012-07-05 16:16:28
我的观点是,您应该将Factory模式与Singleton (这在工厂中是常见的)结合起来。您对静态方法的建议本质上是一个工厂,但是您可以/应该向这个方向进一步考虑它。使用诸如UserFactory ()和getAllActiveUsers()等方法创建一个类似于getUserByID()的类.等等,这些可以(而且应该是)静态方法;但是,您可以使它成为一个单例,并且每个方法都可以在实例上调用一个类似命名的私有方法(_getUserByID(),_getAllActiveUsers())。实例可以管理您的DB连接,然后在将来您也可以扩展它来处理缓存等。
然后,如果您愿意,您可以将模型分解为一个干净的“接口”(即您的应用程序的其他部分只知道用户的“公共”界面),并且您的工厂可以决定实例化的实际类,只要它符合用户界面。这是高度灵活的,因为您的模型细节随着时间的推移而变化。
https://stackoverflow.com/questions/11347619
复制相似问题