首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由静态方法或函数组成的对象数组?

问由静态方法或函数组成的对象数组?
EN

Stack Overflow用户
提问于 2012-07-05 15:29:19
回答 1查看 302关注 0票数 2

假设我有以下数据:

代码语言:javascript
复制
// Users Table

+----+-------+----------+
| ID | first | last     |
+----+-------+----------+
|  1 | Al    | Anderson |
|  2 | Bob   | Blakely  |
|  3 | Cal   | Cambel   |
+----+-------+----------+

以及下列课程:

代码语言:javascript
复制
// Users.php

class Users {

    public $first;
    public $last;

    ...

}

我需要从查询结果实例化用户对象,并返回一个对象数组。我不知道哪种方法更好:

静态法

在类文件中封装以下伪代码:

代码语言:javascript
复制
public static function getAll() {
    $myUsers = array();
    ...
    foreach ($results as $row) {
        $user = new User();
        ...
        $myUsers[] = $user;
    }
    return $myUsers;
}

就这样叫它:

代码语言:javascript
复制
$allUsers = Users::getAll();

正则函数

类似于静态方法,但也许我也可以重构其他对象.

代码语言:javascript
复制
function getAll($objType='Users') {
    $myArray = new array();
    ...
    return $myArray;
}

哪种方式更好?

我喜欢将它封装在类函数中,但是处理静态数据库连接对象更痛苦。我喜欢简单的“帮手”函数,但那只是把OOP抛到一起。我做什么好?

*更新:这不是MySQLi或PDO的事情。我的问题是(从OOP最佳实践的角度来看),在类中放置一个静态的'getAllOfMyself()‘方法更好,还是像'getAllSomethings()’这样的简单函数更好。

EN

回答 1

Stack Overflow用户

发布于 2012-07-05 16:16:28

我的观点是,您应该将Factory模式与Singleton (这在工厂中是常见的)结合起来。您对静态方法的建议本质上是一个工厂,但是您可以/应该向这个方向进一步考虑它。使用诸如UserFactory ()和getAllActiveUsers()等方法创建一个类似于getUserByID()的类.等等,这些可以(而且应该是)静态方法;但是,您可以使它成为一个单例,并且每个方法都可以在实例上调用一个类似命名的私有方法(_getUserByID(),_getAllActiveUsers())。实例可以管理您的DB连接,然后在将来您也可以扩展它来处理缓存等。

然后,如果您愿意,您可以将模型分解为一个干净的“接口”(即您的应用程序的其他部分只知道用户的“公共”界面),并且您的工厂可以决定实例化的实际类,只要它符合用户界面。这是高度灵活的,因为您的模型细节随着时间的推移而变化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11347619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档