【问题标题】:PHP: Best way to make all database fields accessible inside my class?PHP:使所有数据库字段在我的班级中可访问的最佳方式?
【发布时间】:2012-05-21 20:15:29
【问题描述】:

我正在为我的 PHP 应用程序开发一个类。代码正被转移到一种更加面向对象的方法中,大部分逻辑都驻留在类中。在开发的早期,我创建了用于从数据库中提取信息的单独函数:

function getUserID($id)
function getMemberID($id)
function getUserEmailAddress($id)
function getUserFullName($id)
function getAnalysisConditionId($id)
...
etc.

我有很多函数可以从数据库中提取单个字段元素。事实上,我认为我的数据库中大约 50% 的字段都有一个函数。我开始觉得这有点过分了,应该换一种方式。

我考虑过构建一个函数(如 getUserInfo($id)),并在此函数中查询 User 表中的所有字段,包括与返回所有相关字段相关的任何连接。然后,我将返回结果表中每个字段的数组。然后,如果我在应用程序的某个地方需要这些信息,我可以将其命名为 $class->getUserInfo($id)['id']。

这是最好的方法吗?我是否应该在整个应用程序中提供每个字段?感谢您的意见!

【问题讨论】:

  • 您是否考虑过使用 ORM 而不是自己构建一个?
  • 是的,使用现有的 ORM。已经提到了教义 - 也可以考虑 Propel。

标签: php class


【解决方案1】:

您应该查看几个可用的 ORM 解决方案之一。我自己是Doctrine 的粉丝。基本上,他们会为您管理所有这些,并且通常他们甚至会帮助您生成访问器方法。

【讨论】:

  • 我已经查看了 Doctrine。我不知道我是否想重新发明一切——我可能会尝试在这个项目的第 2 版中实现这一点。我想我可能会坚持只制作我自己的进化程度较低的 ORM,并在未来努力实现它。感谢您的建议!
【解决方案2】:

看一下 Active Record 设计模式。这与您尝试执行的操作类似。

正如其他人所建议的,无需为基本的东西重新发明轮子。只需使用 ORM(Doctrine2 实际上是 PHP 最流行的)。

【讨论】:

    【解决方案3】:

    我必须同意这里的其他答案,并建议您研究现有的解决方案。然而,如果你真的想自己做这件事,你可以使用 PHP 的魔法方法来动态创建所有这些 getter 方法。 Here 简要说明了如何做到这一点。您可以轻松修改此代码以从数据库返回数据,而不是像示例中那样返回数组。

    但实际上,您应该研究现有的解决方案,它们会为您省去很多麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多