0

PHP での出力バッファリングは楽しいものです。多くのことを簡素化します。スクリプトの上部で ob_start() を使用し、下部で ob_get_clean() (またはその他の関数) を使用します。

これら 2 つの呼び出しの間に、親呼び出しに干渉することなく、これらの関数を再度呼び出すことができます。

このタイプのコードは有効ですか? (それはうまくいきますが...) これは良い習慣ですか?

<?php

ob_start(); //NOTICE !!!

echo '<p>echos of the top of the script</p>';
echo GetSomeOtherData(true);
echo '<p>echos after GetSomeOtherData()</p>';

$data = ob_get_clean(); //NOTICE !!!
echo $data;

//just a function to return something, with the help of output buffering
function GetSomeOtherData($toReturn)
{

    ob_start();     //NOTICE !!!
    echo '<p>This has been rendered inside a function</p>';
    $function_data = ob_get_clean();    //NOTICE !!!

    if($toReturn===true)
    {
        return $function_data;
    }
    else
    {
        //may be an error | return something else
        return '<p>An Error</p>';
    }
}
?>
4

2 に答える 2

0

正直なところ、それで問題はないと思います。ob_start() へのすべての呼び出しは、ob_get_clean() 呼び出しと一致するため、そのような関数の使用は「親」の ob_start() に対して完全に透過的です。(ob_start() と ob_get_clean() の呼び出しの) ペアが一致しないと、恐ろしい習慣になりますが、一致する限り、問題が発生することはありません (発生しません)。

于 2013-02-10T06:21:30.980 に答える
0

ob_start()マニュアルから:

出力バッファはスタック可能です。つまり、別の ob_start() がアクティブな間に ob_start() を呼び出すことができます。ob_end_flush() を適切な回数呼び出すようにしてください。複数の出力コールバック関数がアクティブな場合、出力はそれぞれの関数を入れ子の順序で順次フィルター処理されます。

ob_end/getしたがって、 anが一致を終了/返すと想定することは完全に有効ですob_start

ob_start();
  echo "<div class=outer>";
  ob_start();
    echo "<div class=inner></div>";
  $inner = ob_get_clean(); // <div class=inner></div>
  echo "</div>";
$outer = ob_get_clean();     // <div class=outer></div>
于 2013-02-10T10:05:04.250 に答える