2012-11-19 9 views
7

対時々私はこれを参照してください。PHP:<<< PHPでのob_start

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

あなたは私のこれら二つの違いをどのように伝えることができます:通常、私がob_start()を使用しているだろう

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

をバッファに書き込む方法とその利点

+5

私はHEREDOCが明らかに多くのクリーナーであると言います。それはまた、 "バッファに書き込むさまざまな方法"でもありません。 HEREDOCは*文字列を引用する方法です*。 'ob_'は、私が言うことを敢えて外出する前に出力をキャプチャするためにハックします。 – deceze

+1

decezeに同意すると、ほとんどの 'ob_ *'関数は悪いデザインを指しています。その後、HEREDOCのコントローラーまたはモデルで再び「レイヤーを見る」と叫ぶ。 –

+0

@MikeBそれはまた叫んだ "ヘイイ、別のコーダーのためにお金をくれ!" –

答えて

6

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

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

+1

ありがとう。私はその点を見る。 HEREDOCは単純なHTMLテンプレートには適していますが、ob_start()、ob_get_contents()はその間にあるすべてのものを取得します。 – Jedi

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

これは、単一引用符と二重引用符を使用するのと同様の文字列を、書き何とか別の方法で物事を脱出するための構文である、PHP string Heredoc syntaxを使用しています。 {}を使用すると、いくつかのPHP文字列を直接挿入することができます。


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

これは全く別のものです。 PHP output buffering controlを使用して、でないものをPHPコードブロック内のにキャプチャします。与えられた例のように、<p>Hello world</p>はPHPコードブロックの外側に書かれており、すぐにクライアントに出力されるはずです。出力バッファリングを有効にすると、PHP内のバッファ内に格納されるため、後でob_get_contents()またはob_get_clean()を使用して取得できます。 PHP変数を挿入する必要がある場合は、<?=$blah?>または<?php echo $blah?>を使用する必要があります。


一部のCMSでは、出力バッファリング制御機能を使用してコンテンツとモジュールを管理しています。 1つの例はJoomlaです。この設計の利点は、モジュールが予約されたスペースにコンテンツを配置する必要があるときはいつでも、コンテンツを利用可能にするために単にechoを使用できることです。これにより、特定の関数呼び出しを実装したり、特定の変数に割り当てる必要なく、モジュールからコンテンツを取得する方法が簡単になり、システムの管理が容易になります。

<?php 
ob_start(); 
include dirname(__FILE__)."/content.php"; 
$content = ob_get_clean(); 
output_document(array("body"=>$content)); 

また、私は上に一つのファイルを含めることができるように、と私はシンプルなテンプレートシステムを作成することができます最後に任意のPHPを持たずに出力バッファリング機能を利用するが、これは一種のですオフトピック。

+0

あなたの説明をありがとう:-)本当に有益! – Jedi

+0

Joomlaはそれを使用していますか?情報をありがとう - 今私は本当に変数にHTMLを格納するためのoutputbufferingを使用して悪いデザイン:)(Joomlaは/私のために設計された悪いと思わ:)) –

関連する問題