正确的方法?数据库实体的PHP对象

时间:2014-02-03 12:51:26

标签: php mysql oop

我正在努力解决这类问题,我无法通过Google直接回答我的问题。

假设我们在数据库中有一个表'users',它包含以下列:id, username, password, real_name

然后我的问题就开始了。

我知道我们可以为此创建一个独立的课程:

class User
{
    private $_id;
    private $_username;
    private $_password;
    private $_real_name;

    // getters

    // setters
}

现在,我应该在该类上添加fetchById等函数吗?我的意思是,这是一个好习惯吗?

public function fetchById($id)
{
    // validate param
    // query database
    // copy results to appropriate properties
}

或者应该由另一个类完成,比如UserManager?然后对于每个结果,我们将数组结果转换为该对象?

此外,我应该在哪里放置像fetchUsers这样的函数来从数据库中获取多个用户?处理同一实体的多个记录的函数。

我正在寻找代码效率和性能。

我知道'一些'想法,但我无法证明这一点。我需要帮助。

我目前正在使用CodeIgniter,但我认为这个问题通常是PHP OOP。

2 个答案:

答案 0 :(得分:1)

就我个人而言,我的模型(表示数据库表的对象)扩展了一个具有ID attirbute和共享静态函数(如fetchById())的abstractModel对象。这个抽象模型还有像save()这样的方法,它们使用要保存的对象的ID。

您不必在表中包含“id”字段,模型的ID只需是表中唯一的键字段之一。

我在抽象类中有一个通用的loadAll()静态函数,而不是fetchUsers()。因此,您可以调用Users :: loadAll()来获取用户的所有模型。这意味着您的大多数模型都可以以相同的方式连接,并减少重复的代码。当然,如果有特定于模型的方法,那么您需要在子模型中定义它们。

答案 1 :(得分:0)

为表管理构建一个类,为实体构建另一个类。

请参阅其他ORM,如doctrine,propel或框架ORM,如cakephp。