請考慮下面的例子:如何防止發生錯誤時的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