打印<<<结束;题

时间:2011-07-10 00:25:42

标签: php html

好的,我有一个问题。我使用print <<< END后跟END;后的html和变量,而不是echoprint。我使用它是因为它似乎对速度没有影响,而且在我看来代码看起来更有条理。我相信其他人会不同意,但这只是我的意见。

我有一个当前项目,这是我用来输出HTML的主要方法。到目前为止没问题。

使用它有什么缺点?我以前曾和编码员谈过这件事,但他们从来没有给我一个不使用它的理由。我对此有任何建议表示感谢,因为我没有遇到任何问题。

2 个答案:

答案 0 :(得分:4)

您描述的语法称为heredoc。据我所知,使用heredocs和单/双引号字符串之间没有性能差异。

Heredocs通常可以帮助防止语法错误,因为不需要在字符串中转义'"。另一个选择是跳出PHP到纯HTML,这不需要echo次调用:

<?php

... do things ...

?>
<div id="result"><?php var_dump($result); ?></div>
<?php

... do more things ...

?>

答案 1 :(得分:2)

我能想到的唯一缺点是开发人员难以阅读。这也是意见,但我发现在模板文件中阅读替代语法要容易得多,即:

<?php if($something): ?>
  <div id="something">
    <?php echo $something->text ?>
  </div>
<?php endif; ?>

就这样切换进出是唯一的原因我可以看到使用heredoc就html而言。如果您有输出大量html的函数,那么您应该更改它们以某种方式包含文件。 IE浏览器。除了在视图中,你需要切换进出html,这些视图应该完全独立于你的功能或模型。例如,你应该这样做:

function getSomething($var){
  if($var){
   $html = <<< HTML
<div id="something">
  $var->text
</div>
HTML;
 }
}

这显然是一个简单的例子,实际上这个例子并不是那么糟糕,但如果HTML更复杂,它开始变得丑陋。对于模型类的方法,无论HTML多么简单,它都只是简单的邪恶。我更喜欢以下内容:

getSomething($var, $template = 'something.php')
{
   if($var){
     ob_start();
     include($template); // $var is accessible in something.php
     return ob_get_clean();
   }

   return null;
}

当然,include会导致轻微的性能损失,但是缓存的来源是: - )