2013-11-15 68 views
0

我有一個問題,自從長久以來我一直在腦海裏徘徊。模型類屬性應該是私人還是公共?

我的模型類應該有屬性私人或公共? (下面的代碼是用PHP編寫的,但問題通常適用於任何語言)

class Xyz extends Model { 

    public function __call() { 

    } 

    public $description; 

    public $title; 
} 

在上面的例子中我有公共屬性$說明和$稱號。我應該讓他們私密嗎?

更新我的模型如下

$x = new Xyz(); 
$x->title('Hello'); 
$x->description('Blah blah'); 
$x->save(); 

我可以更新和使用魔術方法__call得到他們。那麼,爲什麼我們需要讓他們公開?我可以把它們變成私人的。但是當我看到圍繞模型屬性公開的所有框架。

有什麼想法?

UPDATE:

在答案,每個人都在說後續封裝和使用私人的方法。好,但沒有人有答案爲什麼一些PHP框架的模型屬性是公開的?應該有一些理由,不是嗎?

+2

將所有屬性保留爲私有。要封裝它們的值,使用getter和setter來獲取值 –

回答

1

類字段應始終保密。領域的吸氣者和接受者應該是公開的。除了標準化之外,以這種方式使用它也是很好的,這樣您就可以控制自己想要爲客戶類設置私有字段的值。

例如,如果要將對象持久保存到數據庫,並且一列聲明爲非空,並且您不確定您的客戶端類是否真的會返回非空值,則可以處理在setter內部檢查null,以便你要保存到db的值不包含空字段,就像你的db表所要求的一樣。

2

按照OOP,我們需要遵循封裝。請使您的物業private並有public訪問器和mutators。但是,這取決於你的訪問器和增變器也可以有其他修飾符。但是,屬性應始終爲private

0

您必須在模型類中將所有屬性設置爲private,並且如果必須封裝它們的值,則必須使用適當的getters and setters來獲取和設置它們的值。

0

根據OOP封裝原則,這些字段應始終保密。現在的事情是用getter和setter訪問器方法。

吸氣劑通常是公開的安全。唯一的缺點是你必須保持版本之間的向後兼容性,因爲這將成爲該類公共合同的一部分。因此,如果該字段是實現的一部分而不是接口的一部分,那麼也許你想保持它的安全。

至於二傳手更好的問題是如果創建一個或沒有。如果你想讓你的類永遠不變(或者至少是它的某些部分)和它的所有優點和缺點,那麼你根本就不會創建一個setter。