1

私には2つの機能があります:

core_function($atts) {
        (attributes)
        (core functions, a few loops, echoes, a lot of direct input)
    }

そして、それが私が出力バッファリングを使用して関数を表示する方法です(はい、私はそれを使用する必要があります!)。

display_function($atts) {
            (attributes)

                $output = ob_start();
                $output .= core_function($atts);
                $output .= ob_get_clean();

            return $output;
}

すべてが完全に正常ですが、return $ outputはコア関数だけでなく、それらの前の「1」も示します。この「1」がどこから来たのかわかりません。ob_start();を削除すると およびob_get_clean(); 消えます。したがって、出力バッファはどういうわけかこの数字を追加していると思います。しかし、どのように、そしてなぜ?段落などではなく、生の「1」です。

通常、display_function($ atts)は次のように表示されます。

<div>This is Core Function!</div>

また、出力バッファリングを使用すると、次のように表示されます。

1             <div>This is Core Function!</div>

なぜそれが起こっているのですか?それが私の関数と関係がある場合、私はもう一度言います-1はすべてのコンテンツの前に正確に表示されています。

4

1 に答える 1

9

これは、出力バッファリングの仕組みではありません。 ob_start完了時にTRUEまたはFALSEを返すため、連結してはならないものを連結していることになります。(core_functionの呼び出しについても同じことが言えます)。

display_function($atts) {
     (attributes)

     ob_start();
     core_function($atts);
     return ob_get_clean();
}

動作するはずです。すべての出力(エコーやプリントなど)を保存する出力バッファリングをオンにします。ob_get_cleanを呼び出すと、バッファリングされた出力の内容が返されます。

于 2011-03-01T23:25:50.933 に答える