如果我有一个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作为类属性并在需要时获取联系人可能是有用的。(称为"延迟加载")。请注意,"延迟加载"可以被框架隐藏在幕后。