PHP7.4环境下CI 3使用短输出标签加载视图抛出异常问题
<?= $this->load->view('test_view.php', []); ?>
问题原因
- 你使用的是CodeIgniter框架的Loader加载类,
view()方法默认第三个参数$return为false,该模式下方法会直接输出渲染后的视图内容,最终返回值是Loader类的实例本身(即报错信息中的MY_Loader对象,用于支持链式调用)。 - 短输出标签
<?=等价于echo,上述代码的实际执行逻辑是:先执行view()方法输出视图内容,再尝试echo方法返回的MY_Loader对象。 - PHP 7.3及更早版本中,尝试将未实现
__toString()方法的对象转为字符串时,仅会抛出E_RECOVERABLE_ERROR级别的可恢复错误。只要你的错误报告配置未开启该级别报错、或者框架错误处理机制静默忽略了该错误,程序就不会中断运行。此时最多只会在日志中留下一条警告,页面输出的视图内容看起来完全正常,会让你误以为代码没有问题。 - PHP 7.4版本对错误处理做了收紧:默认错误报告级别已包含
E_RECOVERABLE_ERROR,同时主流框架的错误处理机制默认会将该级别错误转换为异常抛出,直接中断程序运行,因此就会出现对象无法转换为字符串的报错。
修复方案
如果要保留短输出标签的写法,只需要给view()方法传入第三个参数true,方法会直接返回渲染后的视图字符串而非输出,就不会触发对象转字符串的报错:
<?= $this->load->view('test_view.php', [], true); ?>
内容的提问来源于stack exchange,提问作者Jalil Khan
相关产品推荐
相关产品推荐

