次の例を考えてみてください。
テンプレート.php:
<?php
echo $vars['arr'];
echo " -------- ";
echo $vars['obj'];
?>
test.php:
<?php
$file = "template.php";
$vars = array( 'arr' => array(), 'obj' => new StdClass() );
var_dump( json_encode($vars) );
function loadFile($file, $vars)
{
try
{
if (is_array($vars) && !empty($vars)) {
extract($vars);
}
ob_start();
include $file;
return ob_get_clean();
}
catch (Exception $e)
{
return false;
}
}
loadFile($file, $vars);
?>
このコードは次を出力します。
string(19) "{"arr":[],"obj":{}}"
PHP Catchable fatal error: Object of class stdClass could not be converted to string in template.php
ここでの問題は、template.php で $vars を array() と考えていますが、json 出力からわかるように、要素の 1 つはオブジェクトです。
テンプレートに単純なチェックを追加して、ekement が配列であるかどうかを確認すると問題は解決しますが、これを複数の要素、要素に対して行う必要があるため、あまり良くありません =) ため、方法を見つけようとしています。テンプレートと $vars をバインドする瞬間のエラーを防ぎます。
ありがとうございました