PHP:如何传递字符串作为参数,而不用用引号括起来


PHP: How to pass a string as an argument without wrapping it in quotes?

我有一些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>

输出缓冲怎么样?

<?php ob_start(); ?>
<div>my html</div>
<?php 
  $html = ob_get_clean();
  echo ($condition) ? $this->wrapWithLinkTo('http://google.com',$html) : $html;
?>

使用输出缓冲!

<?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_ *函数)

可以使用HEREDOC语法。虽然这可能仍然会删除语法高亮。

$html = <<<END
<div>my html</div>
END;

应该这样做:

<?php if ($condition) : ?>
     <a href="http://google.com"><div>my html</div></a>
<?php else : ?>
    <div>my html</div>
<?php endif; ?>