在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。主菜单是由一个列表组成的,但我没有把它包括在内,因为我想这与问题无关。
我认为这是一种糟糕的做法。不知道别人怎么想。首先,它在带有语法高亮显示的文本编辑器中看起来很糟糕,然后你必须担心转义字符串等。
我就是这样做的:
<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语句的结果,在这些区域中呈现新的视图。有很多可能性,但以上只是让它变得更干净(我认为(更好的一种方法。
html的echo在适度使用时没有任何问题。只是不要将它用于长的多行块。你最终总会遇到一些丑陋的结构,需要逃跑等等,这会让阅读变得更加丑陋。
如果你输出的html是"静态"的(没有要插入的变量(,那么考虑脱离php模式(?>
(,直接按原样转储html。如果你确实需要插入变量,那么考虑使用HEREDOC,它的作用就像一个双引号字符串,但没有引号。
为什么不这样写呢?
<?php if($_SESSION['loggedIn'] == 1): ?>
<div id='main'>MAIN MENU stuff goes here</div>
<?php else: ?>
<div id='main'>Please login...</div>
<?php endif; ?>
使用替代控制结构可以将标记与代码进一步分离。
<?php if (condition) { ?>
<div>
some stuff
</div>
<?php } ?>
PHP的美妙之处在于你可以做到这一点。
如果您的项目达到了合理的规模,那么为了可维护性和可扩展性,基本上没有办法将表示元素和程序逻辑完全分离。因此,您在当前代码中所做的并不重要;从长远来看,您应该从一开始就研究一种干净的设计方法。
有许多现有的解决方案,通常涉及由代码加载的某种布局模板。
没有真正的"最佳实践",尽管有些人会争辩说他们更喜欢其中之一。理想情况下,如果将HTML与PHP分离,则将应用程序的后端与前端隔离,从而使其更易于读取、修改和维护。
至于你的代码,我可能会修改它,使其更简洁(取决于你所说的"主菜单内容…"的意思(:
<div id="main">
<?= ($_SESSION['loggedIn'] == 1) ? 'MAIN MENU stuff goes here' : 'Please login...'; ?>
</div>
有些人认为这是一种糟糕的做法,任何事情都是如此。我喜欢不使用回声。如果你这样做,Dreamweaver等编辑会更清楚你想要什么,并获得所有自动完成的好处。
<?php
if ($loggedin)
{
?>
Thank you for being logged in. <hr>
<?php
}
else
{
?>
Please <a href='login.php'>login</a>
<?php
}
?>