2013-11-15 65 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。