0
我現在有這個方法:數據庫字段的依賴
public function getUser($id) {
$user = $this->db->getSingleRecord("SELECT user_id, user_login, user_email FROM users WHERE user_id = ?", $id);
return $user;
}
我覺得這是很明顯這是什麼一樣。 $ user是一個關聯數組,因此$ user ['user_id'],$ user ['user_login']和$ user ['user_email']將存在。這將被傳遞給Smarty的模板,並在該文件中,這些鍵的使用方式:
login: {$user['user_login']|escape} <br />
這讓我想...這是罰款?如果數據庫字段發生變化,我現在需要編輯2個文件。我可以在方法改變這樣的事情:
public function getUser($id) {
$user = $this->db->getSingleRecord("SELECT user_id, user_login, user_email FROM users WHERE user_id = ?", $id);
if (empty($user))
// return empty array
return $user;
else
return array('user_id' => $user['user_id'], 'user_login' => $user['user_login'], 'user_email' => $user['user_email']);
}
如果數據庫領域的變化,我只需要編輯一個文件(此方法)現在。我首先想到的是這種方法好得多。
另一方面,你真的應該照顧這些東西嗎?通常情況下,您不會更改這些字段。
這是最好的方法是什麼?
感謝
謝謝你的答案,但我真的不明白。爲什麼我應該認爲這是巧合,爲什麼當數據庫模式更改(而不是現在)時應該切換到第二種方法?謝謝 – Bv202 2011-04-13 15:22:47
目前,這兩個功能完全相同。所以使用更簡單的一個。數據庫模式更改時,您有兩種選擇:(1)僅更改查詢。這將破壞函數與其環境的契約(例如,使用模板,因爲模板需要返回數組中的某些條目)。 (2)保持合同。爲此,您必須將新查詢的結果映射到合同要求的數組條目(就像您在替代方法中那樣)。 – Oswald 2011-04-13 16:27:27
謝謝,我現在明白了:) – Bv202 2011-04-13 17:12:21