【发布时间】:2011-07-08 10:13:56
【问题描述】:
我创建了一个 Template 类来管理视图及其相关数据。它实现了Iterator 和ArrayAccess,并允许“子模板”以便于使用,如下所示:
<p><?php echo $template['foo']; ?></p>
<?php foreach($template->post as $post): ?>
<p><?php echo $post['bar']; ?></p>
<?php endforeach; ?>
无论如何,与其使用内联核心函数,例如hash() 或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
有点挫败了必须跳过那个箍的目的。 对于这种存在的行为,是否有任何解决方法,或者我应该就这样,偶然防止视图中的数据修改?
【问题讨论】:
标签: php type-conversion tostring magic-methods