我有一个PHP函数,我用它来输出标准的HTML块。它目前看起来像这样:
<?php function TestBlockHTML ($replStr) { ?>
<html>
<body><h1> <?php echo ($replStr) ?> </h1>
</html>
<?php } ?>
我想在函数内部返回(而不是回显)HTML。有没有办法在不在字符串中构建HTML(上面)的情况下执行此操作?
答案 0 :(得分:77)
您可以使用支持变量插值的heredoc,使其看起来相当整洁:
function TestBlockHTML ($replStr) {
return <<<HTML
<html>
<body><h1>{$replStr}</h1>
</body>
</html>
HTML;
}
请密切注意手册中的警告 - 结束行不得包含任何空格,因此不能缩进。
答案 1 :(得分:64)
是的,有:您可以使用ob_start
捕获echo
ed文本:
<?php function TestBlockHTML ($replStr) { ob_start(); ?>
<html>
<body><h1> <?php echo ($replStr) ?> </h1>
</html>
<?php
return ob_get_clean();
} ?>
答案 2 :(得分:16)
这可能是一个粗略的解决方案,我很感激有人指出这是否是一个坏主意,因为它不是标准的功能使用。我已经成功地从PHP函数中获取HTML而没有将返回值构建为具有以下内容的字符串:
function noStrings() {
echo ''?>
<div>[Whatever HTML you want]</div>
<?php;
}
正好'调用'函数:
noStrings();
它会输出:
<div>[Whatever HTML you want]</div>
使用此方法,您还可以在函数中定义PHP变量,并在HTML中回显它们。
答案 3 :(得分:6)
创建模板文件并使用模板引擎读取/更新文件。它将在未来增加代码的可维护性,以及单独显示逻辑。
使用Smarty的示例:
模板文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title>{$title}</title></head>
<body>{$string}</body>
</html>
<强>代码强>
function TestBlockHTML(){
$smarty = new Smarty();
$smarty->assign('title', 'My Title');
$smarty->assign('string', $replStr);
return $smarty->render('template.tpl');
}
答案 4 :(得分:5)
另一种方法是使用file_get_contents()并拥有模板HTML页面
模板页
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title>$title</title></head>
<body>$content</body>
</html>
PHP函数
function YOURFUNCTIONNAME($url){
$html_string = file_get_contents($url);
return $html_string;
}
答案 5 :(得分:1)
或者你可以使用它:
<?
function TestHtml() {
# PUT HERE YOU PHP CODE
?>
<!-- HTML HERE -->
<? } ?>
从此函数获取内容,请使用:
<?= file_get_contents(TestHtml()); ?>
就是这样:)
答案 6 :(得分:0)
如果您不想依赖第三方工具,可以使用此技术:
function TestBlockHTML($replStr){
$template =
'<html>
<body>
<h1>$str</h1>
</body>
</html>';
return strtr($template, array( '$str' => $replStr));
}
答案 7 :(得分:0)
<h1>{title}</h1>
<div>{username}</div>
if (($text = file_get_contents("file.html")) === false) {
$text = "";
}
$text = str_replace("{title}", "Title Here", $text);
$text = str_replace("{username}", "Username Here", $text);
然后您可以将$ text作为字符串回显