PHPのeval関数のウルテク

<?php
eval("echo 'hello';");  #=> hello
eval("<?php echo 'hello' ?>")  #=> Syntax error...

通常evalの中では<?php 〜 ?>で囲まれた状態になっています。evalに渡す文字列の中に<?phpとかを使うとエラーになってしまいます。HTML文字列を渡してその中に含まれるPHPを展開したいということを行いたいのですが、evalに渡すだけではだめ・・・だと思っていたらやる方法があるみたいです。

<?php
$html = <<<EOS
<div id="content">
  <?php echo \$email ?>
</div>
EOS;

$fail = false;

ob_start();

// PHP終了タグに続けてコードを渡す
if (eval('?>'.$html) === false) {
  $fail = true;
}

$evaluatedHtml = ob_get_clean();

if ($fail) {
  throw new RuntimeException(sprintf("Evaluation failed: %s", $evaluatedHtml));
}

eval('?>'.$code)とやるとHTMLモードで展開が行われるみたいです。ちょっと感動した。