PHP:使用函数打印内容vs将内容作为变量返回然后打印


PHP: Using a function to print content vs returning the content as a variable and then printing that instead

我有一些类做的事情为网站,如获取新闻,创建录音的唱片,演出列表等。有listGigs(), listtheadlines()等函数,这些函数将相关信息打印到屏幕上。

是否有一个缺点,让一个函数返回所有的html作为一个变量,然后打印这个变量,而不是直接通过一个函数调用打印出来?

如果我可以在通用变量中设置每个页面的所有内容,例如$maincontent,那么我可以在html模板中调用这些内容。这看起来很直接,我只是想知道这是否是一个好的实践。以下是我今天演讲的大致内容:

在PHP文件

$maincontent = $news->getHeadlines;
include_once 'template.php';
模板文件

<body>
    <div>Some stuff</div>
    <div clas="main"><?php echo $maincontent; ?></div>
</body>

我认为创建直接输出小部件没有任何问题。如果你想获得更多的灵活性你可以实现这样的东西

function displayTemplate($template, $data, $__captureOutput = false){
    if ($__captureOutput) ob_start();
    extract ($data);
    include($template);
    if ($__captureOutput) return ob_get_clean();
}

对于上面的用例,您只需执行

$maincontent = $news->getHeadlines;
displayTemplate('template.php',array("maincontent"=>$maincontent));

$maincontent = $news->getHeadlines;
$data = displayTemplate('template.php',array("maincontent"=>$maincontent), true);

我怀疑从函数返回HTML是否明智。

让函数输出HTML的缺点是,现在您已经将应用程序(域)逻辑和表示逻辑耦合在一起了。假设您希望以不同的方式表示相同的数据,例如JSON对象或要写入文件的原始数据。您要么必须为每种情况编写额外的函数,要么编写一个函数来解析HTML,从中提取数据并将其转换为您想要的格式。

如果函数完成了工作,但只返回PHP数据结构,那么您可以将该输出用作实现表示逻辑的另一个函数的输入。

直接从函数中打印HTML是非常不灵活的,您甚至没有将其重新解析为另一种格式的选项。

作为一个规则,好的软件是松散耦合的,各种各样的关注点彼此分离。数据的计算和数据的表示是不同的关注点。