我创建了一个Template
用于管理视图及其相关数据的类。它实现Iterator
and ArrayAccess
,并允许“子模板”以便于使用,如下所示:
<p><?php echo $template['foo']; ?></p>
<?php foreach($template->post as $post): ?>
<p><?php echo $post['bar']; ?></p>
<?php endforeach; ?>
无论如何,与其使用内联核心函数,例如hash()
or date()
,我认为创建一个名为 的类会很有用TemplateData
,它将充当存储在模板中的任何数据的包装器。
这样,我可以添加常用的格式化方法列表,例如:
echo $template['foo']->asCase('upper');
echo $template['bar']->asDate('H:i:s');
//etc..
当通过$template['foo'] = 'bar';
控制器设置一个值时,该值'bar'
存储在它自己的TemplateData
对象中。
我使用了魔法__toString()
,所以当你回显一个TemplateData
对象时,它会转换(string)
并转储它的值。然而,尽管口头禅控制器和视图不应该修改数据,每当我做这样的事情:
$template['foo'] = 1;
echo $template['foo'] + 1; //exception
它死在Object of class TemplateData could not be converted to int
; 除非我重铸成 $template['foo']
一个字符串:
echo ((string) $template['foo']) + 1; //outputs 2
有点违背了必须跳过那个箍的目的。是否存在针对此类行为的任何解决方法,或者我应该照原样采取这种做法,偶然防止视图中的数据修改?