所以我目前拥有的是SQL中的表格,表格连接不同的表格,例如
Table1: id, identifier, other_attributes
Table2: id, identifier, other_attributes
Table3: id, table1_id, table2_id // this connects table 1 and 2.
所以我为table1和table2创建了一个对象,允许$table = new table1($id);
和$table->getName();
或$table->setName();
但是,我不太确定这是不是最好的方法?如果是,是否最好为table3创建另一个对象?或者有更好的方法吗?
最后,我所做的是组合getter和setter,这意味着$table->name('somename');
将设置名称,$table->name();
将获得它。结合它们是明智的吗?或者更好地将它们分开?
Hosh
答案 0 :(得分:1)
如果我正在实施此功能,我不会像您那样使用name('somename')
和name()
作为设置者和吸气剂。这使得记忆功能变得容易,但在我看来,它也使得编写错误变得容易得多。当您实际意味着.name('')等时,您可能会意外地键入.name(),并且在代码中发现此类错误可能很困难。
我会自己选择.getName()
和.setName('somename')
。也许我有偏见 - 我有强大的Java背景。
答案 1 :(得分:1)
我会为每个真正使用的对象使用对象(因为名称以某种方式表示......)。
例如,我有一个用户类,它使用来自三个不同数据库表的数据。应该按照名称表示实现n:m关系表。有一个表'user_has_address',我也会在用户类上实现SQL查询(使用Address-class)。但是像'company_has_employees'这样的表中的数据将存在于公司类中。
如何在PHP 中命名您的getter和setter 是一个编码约定的问题(例如在您的公司或您自己的公司)。在使用魔术方法(如__call())时,你根本不需要它们,但正如@JJ所指出的那样,它会使测试变得更容易。
答案 2 :(得分:1)
我还强烈推荐getName()和setName()。原因很简单:一个好的IDE可以避免打字工作。
例如,您输入:
$name = 'str';
$table->setN
然后代码完成可以启动,这可能导致$ table-> setName($ name)。如果您只有一个名称($ name = null)方法,则IDE无法确定是否建议参数。此外,使用setX()/ getX()通常是 veeeery ,这有助于理解您的代码。