我想有条件地输出 HTML 以生成页面,那么在 PHP 4+ 中回显多行 HTML 片段的最简单方法是什么?我需要使用像 Smarty 这样的模板框架吗?
echo '<html>', "\n"; // I'm sure there's a better way!
echo '<head>', "\n";
echo '</head>', "\n";
echo '<body>', "\n";
echo '</body>', "\n";
echo '</html>', "\n";
有几种方法可以在 PHP 中回显 HTML。
1.在PHP标签之间
<?php if(condition){ ?>
<!-- HTML here -->
<?php } ?>
2. 在回声中
if(condition){
echo "HTML here";
}
对于回显,如果您希望在 HTML 中使用双引号,则必须使用单引号回显,如下所示:
echo '<input type="text">';
或者你可以像这样逃避它们:
echo "<input type=\"text\">";
3.Heredocs
4. Nowdocs(自 PHP 5.3.0 起)
模板引擎用于在主要包含 HTML 的文档中使用 PHP。事实上,PHP 最初的目的是成为一种模板语言。这就是为什么使用 PHP 您可以使用短标签之类的东西来回显变量(例如 <?=$someVariable?>
)。
还有其他模板引擎(例如 Smarty、Twig 等)使语法更加简洁(例如 {{someVariable}}
)。
使用模板引擎的主要好处是将设计 (presentation logic) 与编码 (business logic) 分开。从长远来看,它还使代码更清晰,更易于维护。
如果您还有任何问题,请随时发表评论。
PHP documentation 中提供了有关这些内容的进一步阅读。
注意: 不鼓励使用 PHP 短标记 <?
和 ?>
,因为它们仅在使用 short_open_tag
php.ini 配置文件指令启用或使用 --enable-short-tags
选项配置 PHP 时可用. They are available, regardless of settings from 5.4 onwards。
像这样尝试(heredoc 语法):
$variable = <<<XYZ
<html>
<body>
</body>
</html>
XYZ;
echo $variable;
<?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>
这样的语法 --- 所以我认为缺少一堆括号并且不确定它们究竟会去哪里。当我稍微老一点的评论得到答复时,总是很有趣,因为那时我对这一切都很陌生。
您可以使用 alternative syntax alternative syntax for control structures 并打破 PHP:
<?php if ($something): ?>
<some /> <tags /> <etc />
<?=$shortButControversialWayOfPrintingAVariable ?>
<?php /* A comment not visible in the HTML, but it is a bit of a pain to write */ ?>
<?php else: ?>
<!-- else -->
<?php endif; ?>
基本上,您可以将 HTML 放在 PHP 标记之外的任何位置。在显示任何数据之前进行所有必要的数据处理也非常有益,以便分离逻辑和表示。
数据显示本身可以在同一个 PHP 文件的底部,或者您可以包含一个主要由 HTML 组成的单独的 PHP 文件。
我更喜欢这种紧凑的风格:
<?php
/* do your processing here */
?>
<html>
<head>
<title><?=$title?></title>
</head>
<body>
<?php foreach ( $something as $item ) : ?>
<p><?=$item?></p>
<?php endforeach; ?>
</body>
</html>
注意:您可能需要使用 <?php echo $var; ?>
而不是 <?=$var?>
,具体取决于您的 PHP 设置。
我偏爱这种风格:
<html>
<head>
<% if (X)
{
%> <title>Definitely X</title>
<% }
else
{
%> <title>Totally not X</title>
<% }
%> </head>
</html>
我确实使用 ASP 风格的标签,是的。 PHP 和 HTML 的混合在我看来是超级可读的。诀窍在于让 <%
和 %>
标记恰到好处。
另一种方法是将 HTML 放在一个单独的文件中,并在这种情况下用占位符 [[content]] 标记要更改的区域。 (您也可以使用 sprintf 代替 str_replace。)
$page = 'Hello, World!';
$content = file_get_contents('html/welcome.html');
$pagecontent = str_replace('[[content]]', $content, $page);
echo($pagecontent);
或者,您可以将所有 PHP 内容输出到缓冲区中捕获的屏幕,写入 HTML,然后将 PHP 输出放回页面。
把 PHP 写出来,抓住它,然后再写一遍,这可能看起来很奇怪,但这确实意味着你可以做各种格式化的东西(heredoc 等),并测试它的正确输出,而无需麻烦页面模板妨碍了。 (Joomla CMS 就是这样做的,顺便说一句。)
IE:
<?php
ob_start();
echo('Hello, World!');
$php_output = ob_get_contents();
ob_end_clean();
?>
<h1>My Template page says</h1>
<?php
echo($php_output);
?>
<hr>
Template footer
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';
echo('Echo as HTML' . htmlspecialchars((string)$enter_string));
只需使用 print 函数在 PHP 文件中回显文本,如下所示:
<?php
print('
<div class="wrap">
<span class="textClass">TESTING</span>
</div>
')
?>
除了 Chris B's 答案之外,如果您仍然需要使用 echo
,但仍希望保持简单和结构化,并且不想使用 <?php stuff; ?>
向代码发送垃圾邮件,则可以使用以下语法。
例如,您要显示画廊的图像:
foreach($images as $image)
{
echo
'<li>',
'<a href="', site_url(), 'images/', $image['name'], '">',
'<img ',
'class="image" ',
'title="', $image['title'], '" ',
'src="', site_url(), 'images/thumbs/', $image['filename'], '" ',
'alt="', $image['description'], '"',
'>',
'</a>',
'</li>';
}
Echo 接受多个参数,因此缩进效果很好,看起来很不错。同样使用带参数的 echo
比连接更有效。
echo '
<html>
<body>
</body>
</html>
';
或者
echo "<html>\n<body>\n</body>\n</html>\n";
尝试这个:
<?php
echo <<<HTML
Your HTML tags here
HTML;
?>
我就是这样做的:
<?php if($contition == true){ ?>
<input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
<p>No input here </p>
<?php } ?>
($contition == true)
不受欢迎。最好,您会改为($contition)
(原文如此)
不要回显 HTML。
如果你想使用
<?php echo "<h1> $title; </h1>"; ?>
你应该这样做:
<h1><?= $title;?></h1>
不定期副业成功案例分享
<?=$var?>
。像往常一样不鼓励使用短标签,并将其删除 (<? doStuff() ?>
)。