Smarty和对象私有财产

时间:2013-12-06 10:09:42

标签: php smarty

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

{$object->property}

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

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

${object.property}

这不会发生在Smarty模板中,因为私有属性不能以这种方式访问​​。所以我必须使用如下语法:

{$object->getProperty()}

为什么?为什么Smarty没有像jsp EL那样解决问题?

1 个答案:

答案 0 :(得分:0)

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

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

如果您拥有私人会员的吸尘器和设置者,您可以随意更改它,模板将一无所知。