J0k 的回答提供了丰富的信息,但并没有真正用外行的方式回答这个问题。ESP。关于单个与多个问题。
区别并不是真正的单个实例与多个实例,而是更多实例化与未实例化的区别。
非常简单:
当您还没有要读取或操作的对象的实例时,您可以使用 Table 函数。
当您已经拥有对象的实例并且想要保存、更新它或检索有关它的更多信息(相关对象)时,您可以使用 Class 函数。
通常从类函数访问表函数
更复杂:
通常,通过良好的设计,您将需要在常规 Class 方法和 Table 方法中创建方法。
假设您有一个与购买有一对多关系的客户(与产品有一对多关系)
假设您想编写一个方法或获取客户的所有产品。
在 Customer.class.php 你创建一个:
public function getProducts(){}
您在常规课程中创建它,因为一旦您拥有客户,您只会对客户拥有的产品感兴趣
这可能类似于:
Doctrine_Core::getTable('Product')->getByCustomerId($this->get('id')
在这里,您可能还没有任何 Product 实例,但您想检索它们,所以这应该放在 Table 类中。
这不能简单地分解为单一与多重的原因是:如果您要创建一个功能来退还属于客户的所有产品。您可能正在处理多种产品,但您不希望仅在表格中创建您的功能。您可能需要对您的支付处理器进行 API 调用,您可能需要检查每个产品的退款期限,ETC。
相反,您创建表函数来检索正确的数据,然后通过创建类函数来操作该数据。
请注意,我看到优秀的程序员总是犯这个“错误”。这通常归结为个人风格问题。