PHPでob_startの使い方とか使い道とか
PHPで自作フレームワークを作る時にob_start
関数が便利そうなので、周辺知識をまとめておく。
ob_startとは何か?
ob_start
関数とは、出力用のバッファリングを有効にするための関数。
普通echo "hello"
などのように書くとターミナルやHTMLに文字が出力されるが、ob_start
を使うことですぐに標準出力として結果を出すのではなく、バッファリングに溜め込むことができるようになる。
(バッファリングとは、パソコン上に一旦データを溜め込む場所みたいなやつ)
<?php ob_start(); echo "hello"; $content = ob_get_clean();
ただob_start()
関数を使っただけでは、「バッファリングを使うよ」と宣言しているだけなので、実際にバッファリングの中身を変数に格納するためにはob_get_clean
関数を使うこと。
ob_get_clean
を使うことで、バッファリングの内容を出力した後にバッファリングを削除してくれる。
また、バッファリングの内容を出力したいだけであればob_get_contents
、バッファリングを削除したい場合はob_end_clean
を使うと良い。
参考:PHP: ob_get_contents - Manual
実践的なob_startの使い方
上記の例では簡単なものを示したが、実際のob_start
の使い所は「何かしらのファイルに変数を格納して、新たなコンテンツを作る」という使い方が多い。
この説明だと分かりにくいと思うので、以下は例を示す。
例えば、view.php
というファイルがあるとする。
// view.php <?php <html> <head> <title><?php echo $title;?></title> </head> <body> <h1><?php echo $heading;?></h1> </body> </html>
上のファイルをそのままwebページとして出力するのではなく、$title
変数と$heading
変数に何かしらの値を格納した上でwebページとして出力したい、という場合にob_start
を使うと良い。
具体的には、以下のように書くと良い。
<?php $title = "sample page"; $heading = "sample heading"; ob_start(); require 'view.php'; $content = ob_get_clean(); echo $content;
上記のように書くことで、require 'view.php';
とした時点で、$title
変数の値を反映させたview.phpの内容がバッファリングに格納されて、$content = ob_get_clean();
でバッファリングの内容を$content
変数に格納している。
最後のecho $content;
の時点では、ob_get_clean();
でバッファリングがオフになっているので、標準出力として表示されるようになっている。
今回のob_start
関数は、主にフレームワークのViewクラスやOutputクラスに書かれていることが多い。