与MySQL交互的好方法?

时间:2011-08-28 11:59:59

标签: php mysql class object

所以我目前拥有的是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

3 个答案:

答案 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 ,这有助于理解您的代码。