【问题标题】:Store a lot of object properties存储大量对象属性
【发布时间】:2013-07-08 01:26:25
【问题描述】:

我正在学习 OOP PHP,在类设计方面遇到了一点问题。

我有一个 User 类,它将包含基本的用户字段(邮件、个人信息等)

还有一些用于自定义用户类型(用户、管理员、客户端...)的子类。

这些子类有一个“formFields”属性。它是一个数组,包含表单所需的所有字段。

例子:

 array('user_mail' => array('label' => 'E-mail', 
                            'name' => 'user[user_mail]', 
                            'required' => 1), 
       'js' => 'some custom script', 
       classes => 'css classes', 
       etc...);

根据子类类型会有很多表单,很多字段...

我不确定最好的方法。

将这些字段存储在对象中一开始很简单,但开始很难维护。 (而且每次我执行 var_dump 时,我都会得到一个充满相同属性的页面……)

我不认为为每个表单制作一个数据库表是一个好主意,因为表单有多个版本。

我可以为所有表单中的所有字段创建一个数据库,但是不会使用很多表字段...(或者将它们序列化?这不是有点奇怪吗?)

我没有看到很多解决方案,也许有人知道什么是最好的......

TL/DR:

存储多个表单域的最佳方式?

  • 数组作为对象属性
  • 多个表
  • 一张大桌子
  • XML
  • 文本文件什么的...

谢谢

【问题讨论】:

    标签: php forms class oop architecture


    【解决方案1】:

    您可以将这些字段提取到某种管理它们的表单类中。根据请求对象(例如用户或管理员等),它返回一组不同的表单。

    如果您想进行 OOP,那么以最简洁的方式创建一个工厂(工厂模式)并返回一个新的 Form 对象,其中包含可用于构造表单的正确字段。将所有这些项目制作成一个名为IFormObject 或类似名称的界面,并提供对这些功能的访问。

    粗略的方法,只需制作一个表单对象并将逻辑封装在其中,然后根据请求对象(用户、管理员等)填充表单数据

    【讨论】:

    • 好的,所以我应该将所有内容存储到属性中?根据请求对象发送结果的想法很好,但是您知道一个函数来知道调用该方法的对象是什么吗?而且,最后但并非最不重要的一点是,我不明白使用接口的意义。感谢您的想法,感谢您有时间再解释一下。
    • 在 PHP 中检测什么对象正在调用该方法,您可以使用 'instanceof' 运算符。在纯 OOP 中,这并不理想,因为您创建了硬依赖,但在您的代码中,这并不是什么大问题。这些接口可以使您的结果对象“多形”,因此无论返回什么对象,您的消费类总是知道如何处理它。
    【解决方案2】:

    如果我确实正确理解了您的问题,我宁愿反其道而行之。 我的意思是,我会创建一组不同的用户(管理员、用户、客户端等),这些用户具有受限的属性集、从父类继承的属性以及特定于该类别的有限数量的特殊属性。

    然后,我将创建我的每个对象并在数据库上使用特定标志查看关于读取/写入或执行它所需的访问级别(在网络上它将在编辑模式、只读模式下进行筛选)完全)。

    我现在知道这可能不是您所期待的答案,而是我的方式来做一个更灵活和可维护的应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多