我有一些HTML,当条件满足时,我需要将其包装在锚标记中。我可以这样做:
<?php
$html = '<div>my html</div>';
if ($condition):
?>
<a href="http://google.com"><?php echo $html ?></a>
<?php else: ?>
<?php echo $html ?>
<?php endif; ?>
...但我不想将html包装在引号中以将其转换为字符串。这有两个原因:语法突出显示消失,维护更难。
我该如何做以下事情?
<!-- pseudo code -->
<?php if ($condition): echo $this->wrapWithLinkTo('http://google.com', ?>
<div>my html</div>
<?php ); endif; ?>
...以便最终结果是:
<!-- when $condition is true -->
<a href="http://google.com"><div>my html</div></a>
<!-- when $condition is false -->
<div>my html</div>
答案 0 :(得分:5)
输出缓冲怎么样?
<?php ob_start(); ?>
<div>my html</div>
<?php
$html = ob_get_clean();
echo ($condition) ? $this->wrapWithLinkTo('http://google.com',$html) : $html;
?>
答案 1 :(得分:4)
<?php ob_start(); ?>
<div>my html</div>
<?php
$html = ob_get_clean();
if ($condition):
?>
<a href="http://google.com"><?php echo $html ?></a>
<?php else: ?>
<?php echo $html ?>
<?php endif; ?>
PHP的输出缓冲用于捕获PHP代码,HTML模式或任何内容的输出,然后将其存储到变量中,而不是将其输出到客户端(ob_get_clean()),将其存储到变量中也将它发送给客户端(ob_get_flush()),或用它做一大堆其他事情! (ob_* functions)
答案 2 :(得分:1)
您可以使用HEREDOC语法。虽然这可能仍会删除语法高亮。
$html = <<<END
<div>my html</div>
END;
答案 3 :(得分:0)
这应该这样做:
<?php if ($condition) : ?>
<a href="http://google.com"><div>my html</div></a>
<?php else : ?>
<div>my html</div>
<?php endif; ?>