8

PHP では、次のように表示されることがあります。

$html = <<<HTML
<p>Hello world</p>
HTML;

通常、私は ob_start() を使用していたでしょう:

ob_start();
?>
<p>Hello world</p>
<?php
$html = ob_get_contents();
ob_clean();

これら 2 つのバッファへの書き込み方法の違いとその利点について教えてください。

4

2 に答える 2

8
$html = <<<HTML
<p>Hello world</p>
HTML;
// equivalent:
$html = "<p>Hello world</p>";

これは、一重引用符や二重引用を使用するのと似ていますが、何とか異なる方法で物事をエスケープします。{}いくつかの PHP 文字列を直接挿入するために使用できます。


<?php
ob_start();
?>
<p>Hello world</p>
<?php
$html = ob_get_clean();

これは全く別物です。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));

また、出力バッファリング関数を使用して、先頭に 1 つのファイルを含めることができ、最後に PHP を使用せずに単純なテンプレート システムを作成できますが、これはトピックから外れています。

于 2012-11-19T14:23:25.950 に答える
6

HEREDOC ( <<<) は、文字列データを変数に書き込むもう 1 つの方法です。一方、出力バッファは、ob_start()を呼び出す前にコードに含まれる可能性のある警告またはエラーの (HTML) 出力を含めた後に発生するすべての出力をキャッチしますob_get_contents()

通常、HTML で文字列をフォーマットする必要がある場合は、HEREDOC または通常の文字列表記を使用します。出力バッファは通常、HTTP ヘッダーを送信する前に出力をキャッチする必要がある場合に使用されます (たとえば、FirePHPを使用してアプリケーションをデバッグする場合、FirePHP はログ データを HTTP ヘッダーに埋め込むため、出力バッファリングを使用する必要があります)。ヘッダー)。

于 2012-11-19T14:18:20.083 に答える