我有一些类做的事情为网站,如获取新闻,创建录音的唱片,演出列表等。有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是非常不灵活的,您甚至没有将其重新解析为另一种格式的选项。
作为一个规则,好的软件是松散耦合的,各种各样的关注点彼此分离。数据的计算和数据的表示是不同的关注点。