我有一个 PHP 函数,用于输出标准的 HTML 块。它目前看起来像这样:
<?php function TestBlockHTML ($replStr) { ?>
<html>
<body><h1> <?php echo ($replStr) ?> </h1>
</html>
<?php } ?>
我想返回(而不是回显)函数内的 HTML。有什么方法可以做到这一点,而无需在字符串中构建 HTML(上图)?
我有一个 PHP 函数,用于输出标准的 HTML 块。它目前看起来像这样:
<?php function TestBlockHTML ($replStr) { ?>
<html>
<body><h1> <?php echo ($replStr) ?> </h1>
</html>
<?php } ?>
我想返回(而不是回显)函数内的 HTML。有什么方法可以做到这一点,而无需在字符串中构建 HTML(上图)?
您可以使用heredoc,它支持变量插值,使其看起来相当整洁:
function TestBlockHTML ($replStr) {
return <<<HTML
<html>
<body><h1>{$replStr}</h1>
</body>
</html>
HTML;
}
请密切注意手册中的警告 - 结束行不能包含任何空格,因此不能缩进。
是的,有:您可以echo
使用以下方法捕获编辑文本ob_start
:
<?php function TestBlockHTML($replStr) {
ob_start(); ?>
<html>
<body><h1><?php echo($replStr) ?></h1>
</html>
<?php
return ob_get_clean();
} ?>
这可能是一个粗略的解决方案,如果有人指出这是否是一个坏主意,我将不胜感激,因为它不是函数的标准使用。我在没有将返回值构建为字符串的情况下从 PHP 函数中获得了一些成功,其中包含以下内容:
function noStrings() {
echo ''?>
<div>[Whatever HTML you want]</div>
<?php;
}
只是'调用'函数:
noStrings();
它会输出:
<div>[Whatever HTML you want]</div>
使用此方法,您还可以在函数中定义 PHP 变量,并在 HTML 中回显它们。
创建模板文件并使用模板引擎读取/更新文件。它将增加您的代码在未来的可维护性以及将显示与逻辑分开。
使用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');
}
另一种方法是使用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;
}
如果您不想依赖第三方工具,您可以使用此技术:
function TestBlockHTML($replStr){
$template =
'<html>
<body>
<h1>$str</h1>
</body>
</html>';
return strtr($template, array( '$str' => $replStr));
}
或者你可以使用这个:
<?
function TestHtml() {
# PUT HERE YOU PHP CODE
?>
<!-- HTML HERE -->
<? } ?>
要从此函数获取内容,请使用:
<?= file_get_contents(TestHtml()); ?>
就是这样 :)
<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 回显为字符串