PHP变量 vs 数组 vs 对象

10
这可能是一个非常简单的问题,但我正在制作一个简单模板系统用于网站,并试图跟踪我的变量使用以保持整洁有序。
您能告诉我以下方法是否有优劣之分吗?
简单变量:
``` ```

``` ```

``` {} ```
请注意保留所提供的 HTML 标签。
$tpl_title = 'my title'
$tpl_desc = 'my text'

数组:

$tpl['title'] = 'my title'
$tpl['desc'] = 'my text'

Object:

$tpl->title = 'my title'
$tpl->desc = 'my text'

我最喜欢对象方法,因为在HTML中echo时看起来很干净,而不是数组,据我所知,它可以以类似数组的方式使用?但是,我想知道的是,是否将对象用于此方式被认为是不良实践或引入了不必要的开销?


如何设置/使用数据是您个人的选择。无论您使用变量/数组/对象都没有区别。重要的是让您感到舒适。 - Svetoslav
使用arrayobjectjson格式。这样你的HTML可以在多种语言中工作。 - Baba
PHP 对象 VS 数组 - Terry Seidler
7个回答

8
在理想情况下,每个变量都应该属于一个对象,除了用于临时目的的方法本地变量。但是我们生活在一个不完美的世界中,特别是我们的编程语言离理想情况相差甚远。根据情况选择最好的方法来使自己的生活更轻松。如果您正在使用模板,则通常将所有数据保存在数组中,并提取数组以获取独立的变量。
所以是的,对象方法是最好的,尽可能多地做到这一点,而不要花费太多时间。
另外,如果您喜欢对象并希望以整洁的方式进行操作,可以执行以下操作:
$object = (object)$array;

那会将您的数组转换为一个对象。希望这有所帮助。

6

我认为这是不必要的开销。按照面向对象的方式做,只意味着在你的类内部你仅仅创建了一堆变量,就像你在第一个例子中指定的那样。

在我看来,数组是最好的选择。你只需要使用一个变量,也可以将其集成到你的类中。所以,代替 $tpl->title,你可以使用 $tpl->text['title']


2
在讨论开销和数组与对象时,请注意以下几点: a) PHP 5.0中,对象成为引用类型,这避免了即使在PHP的“正常”写时复制无法处理的情况下进行复制。 b) 在PHP 5.4中,类中定义的属性不再存储在哈希表中,而是存储在C数组中,这(结合了5.3中的内部化字符串等)使得访问更快且需要更少的内存。 c) 另一方面,对于“普通”变量,自从5.1版本以来我们有“编译变量”... 要在这个层面上讨论“开销”是复杂的,并且取决于所执行的确切操作和PHP版本。 - johannes
2
换句话说:编写易于维护和理解的代码,除非您知道存在性能问题... - johannes
数组访问方式更加安全,考虑使用 $o['stupid.key[]'] 进行设置和检索值。但是如果使用 $o->stupid.key[] 访问值,则会失败。 - maraca

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();
    }

0
在我看来,最简洁的设置方式是将它放在一个数组中,就像这样:
$tpl = array (
  'title' => 'my title',
  'desc' => 'my text'
);

你也可以结合Zane的回答。

祝一切顺利!


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

就像Goran所说的那样,你还可以将这些数组存储在ini文件中,并随后根据需要使用parse_ini_file提取它们。

如果您想允许用户编写自己的ini文件,这可能非常重要。


0
最终它们是相同的,这取决于个人偏好,虽然我会使用数组或对象,因为你可以在其中分组变量,这样你就可以更好地排序。
尽管对象方法可行,但我认为这不是其自然预期的用法。
所以我会说数组!
此外,有大量的 PHP 原生函数可用于数组,例如 array_map()array_filter() 数组排序等等...

0

如果您想在使用后重置大量变量数据,那么数组和对象非常有用。

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

除此之外,与普通变量相比,数组和对象在代码和解释上具有更多的对称性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接