【发布时间】:2014-04-29 22:27:59
【问题描述】:
我有两个类,Page 类和 Template 类。一个页面有一个与之关联的模板,因此它将 Template 类的一个对象存储为它的属性之一。
这是我的问题。这些类用于模板化页面。如果我想包含模板文件,我会调用include $Template->view();。但是,由于该对象是 Page 对象的属性,所以我必须调用 include $Page->template->view();。
这让我陷入了两个问题。
- 如果我将
$Page->template变量设为公开,它可能会在任何时候被非模板对象覆盖。 - 将
$Page->template变量设为私有,我无法再通过调用$Page->template->method();来访问它。
在我看来,唯一的选择是Page类中的包装方法,例如$Page->templateView();。
我是唯一一个对此进行编码的人,所以选项 1 是可以接受的,因为我根本不会覆盖它,但我想知道是否有更好的方法。要是有可以公开使用但不能公开修改的属性就好了。
还有其他选择来处理这类事情吗?
我是不是想多了还是错过了什么?
【问题讨论】:
-
什么是
$Page->template?只是一个字符串,引用文件名,比如/my/code/template/dashboard.html? -
@dognose
$Page->template是 Template 类的对象。该类包含有关模板的各种信息。 -
模板是视图的一部分,而不是相反 ;-)
-
@Jack View 是我为保存输出的文件决定的任意术语。每个模板都有它的视图,这是该模板的实际 HTML,然后是一个脚本文件,以防该模板需要包含任何依赖项等。只是尝试制作一个简单的小模板系统并将输出与实际逻辑分开。