对吗?数据库实体的PHP对象

对吗?数据库实体的PHP对象,php,mysql,oop,Php,Mysql,Oop,我正在与这种问题作斗争,我无法通过谷歌找到我问题的直接答案 假设我们在数据库中有一个“users”表,它有以下列:id、用户名、密码、实名 然后我的问题就开始了 我知道我们可以为它制作一个独立的课程,比如: class User { private $_id; private $_username; private $_password; private $_real_name; // getters // setters } 现在,我应该在

我正在与这种问题作斗争,我无法通过谷歌找到我问题的直接答案

假设我们在数据库中有一个“users”表,它有以下列:
id、用户名、密码、实名

然后我的问题就开始了

我知道我们可以为它制作一个独立的课程,比如:

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的问题。

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


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

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

表中不必有“id”字段,模型的id必须是表中唯一的键字段之一


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

为什么不看一些像口才或教义之类的PHP ORM,来看看它们是怎么做的?你对编写自己的数据库对象抽象的指南更感兴趣,或者你会考虑采用一个专门针对你的情况的现有库吗?描述?请说明。在我开始使用别人的库/代码/作品之前,我想先了解这些东西。你可能感兴趣。这个问题是关于实现ACL的,但答案值得一读。