2012-01-09 74 views
3

我正在測試Code Igniter的一些東西,並且我注意到代碼點火器沒有提供讓用戶在模型構造函數中設置參數的方法。 然後我搜索了一下,發現有人發現它在模型中有構造函數沒用。這是爲什麼?我們應該或不應該在模型中使用參數?

我很樂意做這樣的事情:

$user = new User(123); // 123 = id 
$user->getName(); 

或類似的高配車型的東西。但現在事實證明,我們不應該爲它們使用構造函數。

爲什麼我們應該或不應該使用模型類的參數?

回答

2

我扔掉我的帽子,因爲我不知道任何關於代碼點火器,但我知道爲什麼大多數模型通常具有構造函數少模式。

原因是序列化和反序列化。許多語言(例如Vb.net和C#)不允許基於構造函數啓用的類進行序列化。因爲,當序列化一個被串行化的類時,它將不得不通過構造函數,這在反序列化過程中是不可能的,因爲它不是通常代碼路徑的一部分。

我的猜測是,代碼點火器發生同樣的事情,他們決定爲類似的目的刪除構造函數,即使在PHP中有神奇的喚醒。

我認爲這是有道理的,是嗎?

+0

對不起,你是什麼意思序列化?我從來沒有聽說過這件事。 – Shoe 2012-01-10 01:01:27

+0

序列化是將對象或一些不太複雜的數據(如數組)轉換爲字符串或二進制字符串,然後可以將其反序列化回對象/數組或任何其他資源的過程。 – 2012-01-10 01:41:43

+0

在PHP中,你只能序列化PHP數據,所以對象,數組和標量數據。資源無法序列化,因爲它們是特定擴展的上下文。 – 2012-01-10 01:42:18

相關問題