使用echo输出HTML在PHP中被认为是不好的做法?

时间:2011-11-29 21:33:08

标签: php html echo

在PHP中,我使用if语句来识别用户是否登录,并根据结果显示主菜单(如果已登录)或“您需要登录“如果没有消息。我这样做是这样的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <link rel="stylesheet" href="style.css" type="text/css" />
    <title>Home</title>
</head>
<body>
    <div id="header">
       <a href="index.php"><img src="wtcdblogo.png" alt="WTC DB logo" /></a>
    </div>
    <?php 
       if($_SESSION['loggedIn'] == 1) {
          echo "<div id='main'>MAIN MENU stuff goes here</div>";
       } else {
          echo "<div id='main'>Please login...</div>";
       } 
    ?>
</body>
</html>

如您所见,显示主菜单或“请登录”消息的代码由echo生成。这是不好的做法,也许有更好的方法?

顺便说一下,我已经删除了上面代码段中echo的大部分HTML。主菜单由一个列表组成,但我没有打扰,因为它与问题无关,我想。

7 个答案:

答案 0 :(得分:27)

我认为这是不好的做法。不确定其他人的想法。首先,在语法高亮显示的文本编辑器中看起来很糟糕,然后你必须担心转义字符串等。

我就是这样做的:

   <div>
      <? if ($_SESSION['loggedIn'] === 1): ?>
         <div id="main">Main Menu stuff goes here</div>
      <? else: ?>
         <div id="main">Please log in...</div>
      <? endif ?>
   </div>

您可以跳出PHP标记并使用直接HTML。这样做有利有弊。我喜欢它比回声的方式更好。其他选项是根据if语句的结果将新视图呈现到这些区域。很多可能性,但上述只是一种方法,使一点点更清洁,(我认为)更好。

答案 1 :(得分:6)

在适度使用时,html的echo没有任何问题。只是不要将它用于长多线块。你总会得到一些丑陋的构造,需要逃避和诸如此类的东西,这使得阅读更加丑陋。

如果您输出的html是&#34;静态&#34; (没有要插入的变量),然后考虑破坏PHP模式(?>)并简单地按原样转储html。如果确实需要插入变量,请考虑使用HEREDOC,它的作用类似于双引号字符串,但没有引号。

答案 2 :(得分:5)

为什么不这样写呢?

<?php if($_SESSION['loggedIn'] == 1): ?>
    <div id='main'>MAIN MENU stuff goes here</div>
<?php else: ?>
    <div id='main'>Please login...</div>
<?php endif; ?>

使用alternative control structures将您的代码中的标记分开一点。

答案 3 :(得分:3)

<?php if (condition) { ?>
     <div> 
        some stuff
     </div> 
<?php } ?>

PHP的美妙之处在于你可以做到这一点。

答案 4 :(得分:2)

如果您的项目达到合理的大小,那么基本上没有办法将表示元素和程序逻辑分开,只是为了可维护性和可伸缩性。那么你在当前代码中所做的事情并不重要;从长远来看,你应该从一开始就研究一种干净的设计方法。

现有许多解决方案,通常涉及由代码加载的某种布局模板。

答案 5 :(得分:1)

没有真正的“最佳实践”,尽管有些人会说他们更喜欢其中一种。理想情况下,如果将HTML与PHP分开,则会将应用程序的后端与前端隔离开来,从而使其更易于阅读,修改和维护。

至于你的代码,我可能会对它进行修改,使其更简洁(取决于你所说的'MAIN MENU的东西......'我会重新考虑这个编辑):

<div id="main">
    <?= ($_SESSION['loggedIn'] == 1) ? 'MAIN MENU stuff goes here' : 'Please login...'; ?>
</div>

答案 6 :(得分:0)

有些人认为这是不好的做法,对任何事情都是如此。我喜欢不使用echo。如果你这样做,Dreamweaver等编辑器会更清楚你想要什么,并获得所有自动完成的好处。

<?php
if ($loggedin)
{
?>
Thank you for being logged in. <hr>
<?php
}
else
{
?> 
Please <a href='login.php'>login</a>
<?php
}
?>