将数据以对象或数组的形式传递给视图


Passing data to view, as object or as array?

因此,我需要为我的团队创建这样一个约定。当我们必须将数据从控制器传递到视图时,要使用的最佳数据类型是什么?对象还是数组?哪一个更容易管理?有什么惯例已经存在了吗?有什么需要考虑的吗。谢谢

它实际上取决于编程的上下文。如果你要传递可能包含几个值的东西,或者为了使用它,你需要实现一些复杂的逻辑,那么我个人会把它封装在一个对象中。

阵列示例

<?php 
    for($i = 0; $i < 10; $i++) {
        ?>
        <p><?php echo $arr[$i]; ?></p><?php
    }
?>

正如您所看到的,您在视图中所做的一切都是显示它(正如您应该做的那样)。在我看来,这意味着数组很好,因为你有一个简单的数组代码,而输出的复杂性并不能证明对象的开销是合理的。

对象示例

<?php 
    for($i = 0; $i < 10; $i++) {
        ?>
        <p><?php echo $titles[$i]; ?></p>
        <p><?php echo $subHeadings[$i]; ?></p>
        <p><?php echo $paragraphs[$i]; ?></p>
    }
?>

正如你在这里看到的,一个物体可能会让这件事变得更愉快。假设我们把它封装在一个Section对象中。

class Section {
    protected $title;
    protected $subHeading;
    protected $paragraph;
    function __construct($title, $subHeading, $paragraph)
    {
        this.title = $title;
        this.subHeading = $subHeading;
        this.paragraph = $paragraph;
    }
    function __toString()
    {
        return "<p>this.title</p>
        <p>this.subHeading</p>
        <p>this.paragraph</p>"; 
    }
}

然后你所需要做的就是循环并做一些类似的事情:

<?php 
    for($i = 0; $i < 10; $i++) {
        ?>
        <p><?php echo $sections[$i]; ?></p>          
    }
?>

我的推荐

如果你想安全起见,可以选择Object。它更通用;将总是导致更干净的代码,并使其更易于维护和阅读;更不用说将视图与应用程序后端完全解耦这一宝贵资产了。理论上,这意味着你可以在不改变视图的情况下改变应用程序的整个外观,这是一种很好的方式。

不利的一面?有时这是不必要的,当你不需要的时候,你会招致开销。

为了可读性和维护性,我建议您传递对象。如果您需要页面加载速度,则传递数组。