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

标签 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。

最佳答案

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

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

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

关于php - 正确的方法?数据库实体的 PHP 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21527917/

相关文章:

php - 如何在数据库中搜索关键字并返回 50 英里范围内的数据

mysql - 通过在 SQL 中连接相同模式的 2 个表来查找列的总和和最大值

mysql - 在 MySQL 游标中加入查询

javascript - 如何将原型(prototype)添加到对象

java - 如果类只有 getter 和 setter,为什么 Java 中的实例变量应该是私有(private)的

php - 根据选定的复选框值获取下拉列表选项

php - 使用 PHP/MySQL 搜索网站的最佳方式?

mysql - 获取剩余的行

ruby-on-rails - 一个大对象还是一个小加一个大信息对象?

php - Woocommerce 允许选择一种变体