2011-08-28 37 views
0

因此,我現在擁有的是SQL中的表格,其中表格連接着不同的表格,例如,與MySQL交互的好方法?

Table1: id, identifier, other_attributes 
Table2: id, identifier, other_attributes 
Table3: id, table1_id, table2_id // this connects table 1 and 2. 

所以我做了一個對象Table 1和Table,使之類的東西$table = new table1($id);$table->getName();$table->setName();

不過,我不能肯定這是否是最好的方法是什麼?如果是這樣,最好是爲table3創建另一個對象?還是有更好的方法來做到這一點?

最後,我所做的是將getter和setter組合起來,這意味着$table->name('somename');將設置名稱,並且$table->name();將會獲得它。合併它們是否明智?或者更好地將它們分開?

Hosh

回答

1

我會使用對象爲每個真正使用的對象(因爲名稱狀態莫名其妙......)。

例如,我有一個用戶類,它使用來自三個不同DB表的數據。 n:m關係表應該按照他們的名字來表示。有一個表'user_has_address',我也會在用戶類上實現SQL查詢(它使用一個Address-class)。但是,像「company_has_employees」這樣的表中的數據將駐留在公司類中。

以及如何命名您的getter和setter 在PHP是一個編碼慣例(例如在您的公司或您自己的)。在使用魔術方法(如__call())時,您完全不需要它們,但如@JJ所述,它會使測試更容易。

+0

使用__set()和__get()聽起來像是一個想法來替換getter和setter,可能會使代碼的其餘部分更加整齊。 感謝您的關係信息。 –

+0

我會*不會*使用魔術方法,因爲它不允許您在IDE中使用自動完成功能,即您會浪費時間並且容易出錯。此外,您無法確定PHPDoc可提供的確切返回類型/值(例如「整數或-1」)。 – str

+0

@str「你無法確定確切的返回類型」如果這是一個需求,不要使用諸如PHP之類的非類型語言,但要堅持使用Java,例如... – feeela

1

如果我實現這個,我不會用name('somename')name()作爲getter和setter方法爲你做了。它使得記憶功能變得容易,但是在我看來,它使得製作和發現編碼錯誤變得容易很多。當你實際上指.name('')等時,你可能會意外地輸入.name(),並且在代碼中查找這樣的錯誤可能很困難。

我會和.getName().setName('somename')一起去。也許我有偏見 - 我有一個強大的Java背景。

+0

因爲Java,我已經學會了使用類,儘管在我認識Java之前我已經知道了PHP,而且我原本對每個字段都有一個getter和setter,但是我認爲它看起來太笨拙了,但正如feeela的建議,我將使用魔法方法。 –

+0

我同意所說的話(也可以用@str在他的回答中聲明 - setter/getters可能由IDE生成 - 這非常有用),但在所有情況下都不是必需的。例如,jQuery完全是Hosh Sadiq最初使用的:一種獲取和設置的方法,例如參見[jQuery.val()](http://api.jquery.com/val/)。 – feeela

1

我也強烈推薦getName()和setName()。原因很簡單:一個好的IDE可以避免打字工作。

比如你鍵入:

$name = 'str'; 
$table->setN 

,然後代碼完成可以踢這可能導致表 - $>的setName($名)。如果您只有一個名稱($ name = null)方法,則IDE無法確定是否建議參數。另外,它通常使用setX()/ getX()來幫助理解你的代碼,它是veeeery