出力を文字列として得る関数
PHP5.3以上で使える無名関数を利用する。
<?php function capture($f) { ob_start(); $f(); $content = ob_get_contents(); ob_end_clean(); return $content; }
こういうのを作っておくと
<?php function tag($tag, $content) { return "<$tag>$content</$tag>\n"; } $tr = tag('tr', capture(function(){ ?> <td>foo</td> <td>bar</td> <?php })); echo tag('table', $tr . tag('tr', capture(function(){ ?> <td>FOO</td> <td>BAR</td> <?php })) . $tr);
みたいなことができる。Rails の ActionView::Helpers::CaptureHelper#capture みたいなもの。
PHP は <?php 〜 ?> の文法が本質だと思っているし、HTMLエディタやシンタックスハイライトのあるエディタでも文字列で渡すよりは見栄えのよいソースが出来ると思うから、早く PHP5.3 が広まってこういうコードを気兼ねなく書けるようになればいいと思う。