这可能被认为是一个非常愚蠢的问题,但我正在为一个网站组建一个简单的模板系统,并试图跟踪我的变量使用并保持一切都干净整洁。
您能告诉我以下方法是否有任何优点/缺点:
简单var:
$tpl_title = 'my title'
$tpl_desc = 'my text'
数组:
$tpl['title'] = 'my title'
$tpl['desc'] = 'my text'
对象
$tpl->title = 'my title'
$tpl->desc = 'my text'
我最喜欢对象方法,因为它看起来很干净,当html中的echo与数组相反时,afaik它可以像数组一样使用吗?但是,我想知道的是,以这种方式使用对象是否被视为不良做法或引入不必要的开销?
答案 0 :(得分:5)
在理想情况下,每个变量都应属于一个对象,而不是用于临时目的的方法的本地变量。然而,我们并不是生活在理想的世界中,特别是我们的编程语言远非如此。根据具体情况,选择最佳方式,让您的生活更轻松。如果您正在使用模板的东西,通常将所有数据保存在数组中并extract
数组以获得独立变量。
所以是的,对象方法是最好的,尽量让它尽可能多地发生,而不花费大量的时间去做。
此外,如果你喜欢对象,并希望有一个整洁的->
方式,你可以做
$object = (object)$array;
这会将您的数组转换为对象。
希望有所帮助。
答案 1 :(得分:4)
我认为这是不必要的开销。以面向对象的方式做你正在谈论的事情只意味着在你的课堂内你只会创建一堆变量......正如你在第一个例子中所指定的那样。
在我看来,阵列是最好的方式。您只使用一个变量...并且您还可以将其集成到您的类中。因此,您可以使用$ tpl-> text ['title']
而不是$ tpl->标题答案 2 :(得分:1)
我建议在后端部分,将所有内容保存在一个数组中。这允许您只有一个变量来跟踪,一旦将其传递给前端,您可以extract()
数组,将它们转换为简单变量。
使用extract()
简化了FrontEnd上的语法,这意味着模板中只有$ varibles。
在后端你会设置
$array['title'];
曾经在模板中提取的内容是
$title;
protected function fetch($template, $data = null)
{
if (!$this->isTemplate($template)) {
throw new Exception("Template file $this->_templatePath$template not found");
}
ob_start();
if (is_array($data)) {
extract($data, EXTR_SKIP);
}
require $this->_templatePath . $template . EXT;
return ob_get_clean();
}
答案 3 :(得分:0)
最后它们是相同的,这取决于偏好,虽然我会使用数组或对象,因为你可以在那里对变量进行分组,所以你可以更好地整理出来。
尽管对象方法有效,但我认为这不是它的自然用途。
所以我会说数组!
此外,您可以使用大量的PHP本机函数与数组,如array_map()
或array_filter()
数组排序等等...
答案 4 :(得分:0)
在我看来,设置它的最简洁的方法是这样的数组:
$tpl = array (
'title' => 'my title',
'desc' => 'my text'
);
你也可以将它与Zane的答案结合起来。
一切顺利!
答案 5 :(得分:0)
$tpl = array (
'title' => 'my title',
'desc' => 'my text'
);
就像Goran所说的那样,你可以将这些数组存储在ini文件中,然后根据需要使用parse_ini_file
提取它们。如果您想允许用户写入自己的ini文件,这可能很重要。
答案 6 :(得分:0)
数组和对象非常有用。
您可以简单地取消设置数组或销毁对象,而不是在代码中使用未设置的变量范围。
除此之外,数组和对象在代码和解释性方面比正常变量更具对称性