Order对象包含一个Customer对象或客户ID,或者两者都包含


Order object hold a Customer object or the customers ID or both?

如果我有一个Order对象,每个Order都有一个Customer, Order对象应该持有什么,Customer对象或客户ID或两者?

它是否依赖于上下文,或者因为我们在OOP中处理对象,Order应该理想地持有Customer对象,而不仅仅是它的ID,如数据库列?

谢谢。

不要把数据库思维和PHP代码设计混在一起。通常,属性应该设置为对象本身,而不是对象的id。这样的:

class Order {
    /**
     * @var Contact
     */
    protected $contact;

    public function __construct(Contact $contact) {
        $this->contact = $contact;
    }
}

但是有一些原因可能只需要联系人的id是有意义的。最好的例子是必须从数据库中获取联系人,但除了特殊情况外,通常不需要其信息。那么,只将id作为类属性并在需要时获取联系人可能是有用的。(称为"延迟加载")。请注意,"延迟加载"可以被框架隐藏在幕后。