Smarty和对象私有属性


Smarty and objects private properties

Smarty允许在模板中使用以下语法访问对象属性:

{$object->property}

但是(如果我理解正确的话)只有当属性可见性为public时,这才有可能,否则Smarty似乎无法访问它

Java中,我习惯于创建具有私有属性的对象,并且我通常使用getter和setter在业务逻辑中读取/写入这些属性。但是,即使我创建了一个具有私有属性的对象,我也可以使用表达式语言在jsp中访问它:

${object.property}

在Smarty模板中不会发生这种情况,因为无法通过这种方式访问私有属性。所以我必须使用这样的语法:

{$object->getProperty()}

为什么?为什么Smarty不能像jsp EL那样绕过这个问题?

从外部读取和写入对象的私有成员违反了OOP封装原则。如果你将类的一个成员标记为私有,那么除了类中的代码(或友元函数)之外,没有人可以访问它

保持尽可能少的公共成员可以减少不同代码模块之间的依赖关系,使您的应用程序更加灵活。如果您可以访问的私有成员,比如说您的模型,那么您的模板必须知道模型的内部实现。对模型进行更改将花费大量时间,因为您还需要更改模板。

若您有私人成员的getter和setter,您可以随意更改,模板将一无所知。