使用echo输出HTML被认为是PHP中不好的做法?
在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。主菜单是由一个列表组成的,但我没有理会,因为它与这个问题无关,我想。
我认为这是不好的做法。不确定其他人的想法。一方面,它看起来与语法高亮文本编辑器可怕的,那么你不用担心逃串等
这是我要做的事:
<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语句的结果对这些领域提出新的观点。很多的可能性,但上述只是一个方法,使一点更清洁,(我认为)更好。
为什么不把它写成这样?
<?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从代码中分离出更多标记。
<?php if (condition) { ?>
<div>
some stuff
</div>
<?php } ?>
PHP的美妙之处在于你可以做到这一点。
不是特定的PHP .. –
在适度使用html时,echo没有任何问题。只是不要将它用于较长的多行块。你总是会得到一些丑陋的结构,需要逃避和什么,这使得事情更加丑陋。
如果你输出的html是“静态的”(没有要插入的变量),那么考虑打破php模式(?>
)并简单地按原样转储html。如果确实需要插入变量,那么可以考虑使用HEREDOC,它的作用类似于双引号字符串,但没有引号。
有人认为这是不好的做法,对任何事情都是如此。我喜欢不使用回声。如果你这样做,那么Dreamweaver等编辑人员就能更清楚地知道你想要什么,并获得所有自动完成的好处。
<?php
if ($loggedin)
{
?>
Thank you for being logged in. <hr>
<?php
}
else
{
?>
Please <a href='login.php'>login</a>
<?php
}
?>
+1提及自动完成。我稍微修改了你的帖子来澄清一些事情。 –
没有真正的'最佳实践',尽管有些人会争辩说他们更喜欢这两种。理想情况下,如果您将HTML与PHP分开,则应用程序的后端与前端隔离,因此可以更轻松地进行读取,修改和维护。
至于你的代码,我可能会修改它,所以它更简洁(取决于你的意思是'主菜单的东西......“我会考虑这个编辑):
<div id="main">
<?= ($_SESSION['loggedIn'] == 1) ? 'MAIN MENU stuff goes here' : 'Please login...'; ?>
</div>
如果您的项目获取到一个合理的规模,有基本围绕表象元素和程序逻辑的完全分离没有办法,只是为了可维护性和可扩展性的缘故。所以你在当前代码中做什么并不重要;从长远来看,你应该从一开始就考虑一种干净的设计方法。
有许多现有的解决方案,通常涉及某些由代码加载的布局模板。
该死的打败我吧! –
谢谢,这看起来像一个干净的方式来做事情。我有其他页面回显HTML,它变得非常混乱,有时会读卡。 – james246
*难以阅读;) – james246