请考虑以下示例:
模板.php:
<?php
echo $vars['arr'];
echo " -------- ";
echo $vars['obj'];
?>
测试.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() 但是其中 1 个元素是一个 Object,正如您从 json 输出中看到的那样。
在模板中添加一个简单的检查来验证 ekement 是否是一个数组可以解决问题,但是我需要这个到多个元素,元素,所以,不是很好 =) 所以,我试图找到一种方法防止在绑定模板和 $vars 时出错。
谢谢