【问题标题】:How to handle different account types in PHP?如何在 PHP 中处理不同的帐户类型?
【发布时间】:2011-09-23 06:24:22
【问题描述】:

我有 3 个表/模型,关系如下所示:

    Account
       |
   ----------
   |        |
 User     Company

它们都由 Account 的 PRIMARY KEY 连接,并且 User 和 Company 各自有非常不同的方法和字段集。

假设我只知道“账户id”,并且需要加载一个账户,我假设下面是一个好的程序?

  1. Account 模型由 id 加载
  2. 然后确定“帐户类型”
  3. User 或 Company 对象都被加载到 Account 对象本身中。可以这样使用:

    $account->company->company_name();

不知何故,这似乎不是很有效...有人可以提出更好的建议吗?

【问题讨论】:

    标签: php mysql model schema


    【解决方案1】:

    最好让 User 和 Company 都扩展 Account,并且父类 Account 不知道子类(只有子类应该知道父类)所以当您需要添加更多 Account 子类时,您不需要'不需要更改帐户中的任何内容:

        class Account {
            var $email;
            var $password;
    
            function load() {
                // load from db
            }
        }
    
        class User extends Account {
            var $first_name;
            var $last_name;
    
            function load() {
                parent::load();
                // load for this class
            }
        }
    
        class Company extends Account {
            var $company_name;
    
            function load() {
                parent::load();
                // load for this class
            }
        }
    

    【讨论】:

    • 这完全有道理......我遇到的唯一问题是 - 如果我不提前知道该帐户是针对用户还是公司的怎么办?
    • 你能举个例子吗?我猜你是否可以推迟对象的实例化,然后推迟到帐户类型已知,或者,如果在运行时更改对象不是问题,那么只需将对象更改为新对象(从 Account 到用户,例如)。
    猜你喜欢
    • 2010-10-07
    • 2010-09-20
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多