请考虑下面的例子:如何防止发生错误时的ob_start()输出?
的template.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是一个数组(),但是其中的1个元素是一个Object,正如您可以从json输出中看到的那样。
在模板中添加一个简单的检查来验证这个ekement是否是一个数组可以解决这个问题,但是我需要这个到多个元素,元素,所以不是很好=)所以,我试图找到一种方法来防止在绑定模板和$ vars时发生错误。
谢谢
*“在解析失败的情况下”*解析失败?你无法捕捉解析失败。 – 2013-02-14 13:55:04
@WaleedKhan,在技术上你可以通过设置'register_shutdown_function'来处理输出。 – Shoe 2013-02-14 13:56:21
只能通过set_error_handler才能捕获try-catch块中的可捕获致命错误。另请参阅http://stackoverflow.com/questions/2468487/how-can-i-catch-a-catchable-fatal-error-on-php-type-hinting – cmbuckley 2013-02-14 13:56:25