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

jam*_*246 8 html php 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>
Run Code Online (Sandbox Code Playgroud)

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

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

Jem*_*lus 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>
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*c B 6

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

如果你输出的html是"静态"(没有要插入的变量),那么考虑断开php模式(?>)并简单地按原样转储html.如果确实需要插入变量,请考虑使用HEREDOC,它的作用类似于双引号字符串,但没有引号.


Rob*_*ett 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; ?>
Run Code Online (Sandbox Code Playgroud)

使用替代控制结构可以将代码中的标记分开一些.