PHP 8中str_replace()接收void类型参数报错问题咨询
问题原因
你定义的layoutContent()和renderOnlyView()两个方法没有显式返回输出缓冲区的内容,调用ob_get_clean()后直接丢弃了返回值,方法默认返回void类型。PHP8对参数类型校验更严格,因此str_replace()接收void类型参数时会抛出类型不兼容错误。
修复方案
给两个方法添加return语句,返回ob_get_clean()的结果即可,修改后的代码如下:
public function renderView($view) { $layoutContent = $this->layoutContent(); $viewContent = $this->renderOnlyView($view); return str_replace('{{content}}', $viewContent, strval($layoutContent)); } protected function layoutContent() { ob_start(); include_once Application::$ROOT_DIR."/views/layouts/main.php"; // 新增return返回缓冲区内容 return ob_get_clean(); } protected function renderOnlyView($view) { ob_start(); include_once Application::$ROOT_DIR."/views/$view.php"; // 新增return返回缓冲区内容 return ob_get_clean(); }
可选优化
如果需要兼容缓冲区未正常开启导致ob_get_clean()返回false的极端场景,可以对返回值做强制类型转换确保传入str_replace()的参数为字符串:
return (string) ob_get_clean();
内容的提问来源于stack exchange,提问作者idzczakp
相关产品推荐
相关产品推荐

