在PHP中有时候我会看到:
$html = <<<HTML
<p>Hello world</p>
HTML;
Run Code Online (Sandbox Code Playgroud)
通常我会使用ob_start():
ob_start();
?>
<p>Hello world</p>
<?php
$html = ob_get_contents();
ob_clean();
Run Code Online (Sandbox Code Playgroud)
你能告诉我这两种写入缓冲区的方式和它们的优点有什么区别吗?
$html = <<<HTML
<p>Hello world</p>
HTML;
// equivalent:
$html = "<p>Hello world</p>";
Run Code Online (Sandbox Code Playgroud)
这使用PHP字符串Heredoc语法,这是一种编写字符串的语法,类似于使用单引号和双引号但以某种方式以某种方式转义事物.您可以使用{}直接插入一些PHP字符串.
<?php
ob_start();
?>
<p>Hello world</p>
<?php
$html = ob_get_clean();
Run Code Online (Sandbox Code Playgroud)
这是完全不同的事情.它利用PHP输出缓冲控件来捕获不在 PHP代码块内的东西.就像在给定的例子中一样,<p>Hello world</p>是在PHP代码块之外写的,它应该立即输出到客户端.启用输出缓冲后,它们将存储在PHP中的缓冲区中,以便稍后可以使用ob_get_contents()或检索它ob_get_clean().如果需要插入任何PHP变量,则需要使用<?=$blah?>或甚至<?php echo $blah?>.
某些CMS使用输出缓冲控制功能来管理内容和模块.一个例子是Joomla.这种设计的优点是,无论何时模块需要将内容放置到其保留空间,它都可以简单地用于echo使内容可用.这可以简化从模块获取内容的方式,而无需实现特定的函数调用或分配给特定的变量,这使得系统更易于管理.
<?php
ob_start();
include dirname(__FILE__)."/content.php";
$content = ob_get_clean();
output_document(array("body"=>$content));
Run Code Online (Sandbox Code Playgroud)
我还使用输出缓冲功能,这样我可以在顶部包含一个文件,最后我没有任何PHP,我可以创建一个简单的模板系统,但这有点偏离主题.