web-dev-qa-db-ja.com

PHP:関数内の出力を抑制しますか?

関数が生成する可能性のある出力を抑制する最も簡単な方法は何ですか?私がこれを持っていると言う:

function testFunc() {
    echo 'Testing';
    return true;
}

そして、testFunc()を呼び出して、ページに「Testing」が表示されないように戻り値を取得したいと思います。これがdoes他のものを出力する他のコードのコンテキストにあると仮定すると、これを行うための良い方法はありますか?たぶん、出力バッファをいじっていますか?

32
Wilco

はい、 出力バッファ をいじることがまさに答えです。出力するメソッドを呼び出す前にオンにするだけです(関数自体ではなく、呼び出す場所で、スクリプト全体またはスクリプトフローにラップすることができますが、単に「タイト」にすることができます。メソッドの呼び出しをラップします):

function foo() {
  echo "Flush!";
  return true;
}

ob_start();
$a = foo();
ob_end_clean();

また、出力は生成されません。

60
Cody Caughlan

どうぞ:

ob_start();
testFunc();
ob_end_clean();

「ob」は「出力バッファリング」の略です。ここのマニュアルページを見てください: http://www.php.net/outcontrol

11
Ray Hidayat

はい、あなたはPHPの出力バッファリング関数、つまりob_startとob_end_cleanを活用することに関して正しい方向に進んでいます(php.netでそれらを調べてください):

<?php
  function testFunc() {
    echo 'Testing';
    return true;
  }

    ob_start();
    $output = testFunc();
    ob_end_clean();

    echo $output;
?>
3
George Jempty

コードにいくつかの条件を適用するのと同じくらい簡単ではありませんか?

つまり、変数=テストしてから出力する場合、そうでない場合はそうではありませんか?

EVALのようにブラウザに直接出力する結果を持つ関数の場合、結果をob_startでキャプチャできます。

0
Stephen Baugh