我想有条件地输出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";
我想有条件地输出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";
Answers:
有几种方法可以在PHP中回显HTML。
<?php if(condition){ ?>
<!-- HTML here -->
<?php } ?>
if(condition){
echo "HTML here";
}
对于回声,如果您希望在HTML中使用双引号,则必须使用单引号回声,如下所示:
echo '<input type="text">';
或者您可以这样逃避它们:
echo "<input type=\"text\">";
模板引擎用于在大多数包含HTML的文档中使用PHP。实际上,PHP的最初目的是成为一种模板语言。这就是使用PHP可以使用短标签之类的东西来回显变量的原因(例如<?=$someVariable?>
)的原因。
还有其他模板引擎(例如Smarty,Twig等)使语法更加简洁(例如{{someVariable}}
)。
使用模板引擎的主要好处是使设计(表示逻辑)与编码(业务逻辑)保持分离。从长远来看,这也使代码更整洁,更易于维护。
如果您还有其他问题,请随时发表评论。
PHP文档中提供了有关这些内容的进一步阅读。
注意:不建议使用PHP短标记<?
,?>
因为只有在使用short_open_tag
php.ini配置文件指令启用了PHP短标记的情况下,或者如果使用该--enable-short-tags
选项配置了PHP,它们才可用。无论从5.4以后的设置如何,它们都可用。
<?=$var?>
。通常不鼓励使用短标签,并且应将其删除(<? doStuff() ?>
)。
像这样尝试(heredoc语法):
$variable = <<<XYZ
<html>
<body>
</body>
</html>
XYZ;
echo $variable;
<?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>
---这样的语法, 所以我以为缺少了许多括号,不确定它们到底在哪里。当我回答稍老的评论时,总是很有趣,因为那时我还很陌生。
您可以将替代语法用于控制结构并突破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放在单独的文件中,并用占位符[[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就是这样做的。)
即:
<?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));
除了Chris B的答案外,如果您echo
仍然需要使用它,仍然希望保持其简单和结构化,并且不希望使用<?php stuff; ?>
s,则可以使用以下语法。
例如,您要显示画廊的图像:
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
与参数一起使用还比串联更有效。