2011-11-29 103 views
8

在PHP中,我使用if语句来确定用户是否已登录,并根据结果显示主菜单(如果已登录)或者“需要登录”消息,如果没有。我喜欢这样的:使用echo输出HTML被认为是PHP中不好的做法?

<!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。主菜单是由一个列表组成的,但我没有理会,因为它与这个问题无关,我想。

回答

24

我认为这是不好的做法。不确定其他人的想法。一方面,它看起来与语法高亮文本编辑器可怕的,那么你不用担心逃串等

这是我要做的事:

<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语句的结果对这些领域提出新的观点。很多的可能性,但上述只是一个方法,使一点更清洁,(我认为)更好。

+0

该死的打败我吧! –

+0

谢谢,这看起来像一个干净的方式来做事情。我有其他页面回显HTML,它变得非常混乱,有时会读卡。 – james246

+0

*难以阅读;) – james246

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
<?php if (condition) { ?> 
    <div> 
     some stuff 
    </div> 
<?php } ?> 

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

+0

不是特定的PHP .. –

6

在适度使用html时,echo没有任何问题。只是不要将它用于较长的多行块。你总是会得到一些丑陋的结构,需要逃避和什么,这使得事情更加丑陋。

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

0

有人认为这是不好的做法,对任何事情都是如此。我喜欢不使用回声。如果你这样做,那么Dreamweaver等编辑人员就能更清楚地知道你想要什么,并获得所有自动完成的好处。

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

+1提及自动完成。我稍微修改了你的帖子来澄清一些事情。 –

1

没有真正的'最佳实践',尽管有些人会争辩说他们更喜欢这两种。理想情况下,如果您将HTML与PHP分开,则应用程序的后端与前端隔离,因此可以更轻松地进行读取,修改和维护。

至于你的代码,我可能会修改它,所以它更简洁(取决于你的意思是'主菜单的东西......“我会考虑这个编辑):

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

如果您的项目获取到一个合理的规模,有基本围绕表象元素和程序逻辑的完全分离没有办法,只是为了可维护性和可扩展性的缘故。所以你在当前代码中做什么并不重要;从长远来看,你应该从一开始就考虑一种干净的设计方法。

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

相关问题