9

这可能被认为是一个非常愚蠢的问题,但我正在为网站组装一个简单的模板系统,并试图跟踪我的变量使用情况并保持一切整洁。

您能告诉我以下方法是否有任何优点/缺点:

简单的变量:

$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 中回显时看起来很干净,而不是数组和 afaik,它可以以类似数组的方式使用吗?但是,我想知道以这种方式使用对象是否被认为是不好的做法或引入了不必要的开销?

4

7 回答 7

6

在理想情况下,每个变量都应该属于一个对象,而不是用于临时目的的方法的局部变量。然而,我们并不生活在一个理想的世界中,特别是我们的编程语言远非如此。根据情况,选择最好的方法来让你的生活更轻松。如果您将事物用于模板,通常您将所有数据保存在一个数组中,并extract在数组中获取独立变量。

所以,是的,对象方法是最好的,尽量让它发生,而不需要花费大量时间去做。

另外,如果您喜欢对象并希望以简洁->的方式进行操作,则可以

$object = (object)$array;

这会将您的数组转换为对象。

希望有帮助。

于 2013-03-20T11:03:03.777 回答
5

我认为这是不必要的开销。以面向对象的方式做你正在谈论的事情只意味着在你的类中你只会创建一堆变量,就像你在第一个例子中指定的那样。

在我看来,数组是最好的方法。您只使用一个变量,您也可以将它集成到您​​的类中。所以,而不是$tpl->title,你可能有$tpl->text['title']

于 2013-03-20T10:57:23.130 回答
2

数组

我建议在后端部分,将所有内容存储在一个数组中。这使您可以只跟踪一个变量,一旦将其传递到前端,您就可以extract()通过数组将它们转换为简单的变量。

句法

使用extract()简化了前端的语法,这意味着模板中始终只有 $variables。

在后端,您将设置
$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();
    }
于 2013-03-20T10:58:47.200 回答
0

最后它们是相同的,这取决于偏好,虽然我会使用数组或对象,因为你可以在那里对变量进行分组,所以你可以更好地整理东西。

尽管 objects 方法有效,但我认为这不是它的自然预期用途。

所以我会说数组!

此外,还有大量的 php 原生函数可以与数组一起使用,比如数组排序等等array_map()……array_filter()

于 2013-03-20T10:59:10.537 回答
0

在我看来,最干净的设置方法是这样的:

$tpl = array (
  'title' => 'my title',
  'desc' => 'my text'
);

您也可以将它与赞恩的回答结合起来。

祝一切顺利!

于 2013-03-20T11:04:18.753 回答
0
$tpl = array (
  'title' => 'my title',
  'desc' => 'my text'
);

就像 Goran 说的那样,您可以稍后将这些数组存储在一个 ini 文件中,并根据需要使用parse_ini_file提取它们

如果您想允许用户写入他们自己的 ini 文件,这可能很重要。

于 2013-03-20T11:56:40.830 回答
0

如果您想在使用后重置大量可变数据,则数组和对象很有用。

您可以简单地取消设置数组或销毁对象,而不是取消设置代码中使用的变量范围。

除此之外,数组和对象在代码和解释方面比普通变量更具对称性

于 2013-12-27T06:14:07.117 回答