在 PHP 8 中作为 str_replace() 参数无效

Void as a str_replace() param in PHP 8

我正在尝试将我的小项目移动到 PHP 8,但我正在努力使用等效的 str_replace() 函数。

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";
    ob_get_clean();
}


protected function renderOnlyView($view)
{
    ob_start();
    include_once Application::$ROOT_DIR."/views/$view.php";
    ob_get_clean();
}

问题是在 PHP 8 中无法在 str_replace() 函数中使用 $view,我得到:Expected type 'array|string'. Found 'void'

有人对此有解决方案吗?

在不完全了解您代码的其他部分的情况下,这只是我的猜测,但请尝试修改您的 renderOnlyViewlayoutContent 函数,如下所示:

public function renderView($view)
{
    $layoutContent = $this->layoutContent();
    $viewContent = $this->renderOnlyView($view);
    return str_replace('{{content}}', $viewContent, $layoutContent);
}

protected function layoutContent()
{
    ob_start();
    include_once Application::$ROOT_DIR."/views/layouts/main.php";
    $out = ob_get_clean();

    return $out;
}

protected function renderOnlyView($view)
{
    ob_start();
    include_once Application::$ROOT_DIR."/views/$view.php";
    $out = ob_get_clean();

    return $out;
}

这应该分别从您的 Application::$ROOT_DIR."/views/$view.php"Application::$ROOT_DIR."/views/layouts/main.php" 文件中捕获每个 echo 编辑的信息,并且 return 它作为调用者范围的字符串。

如果你设置 strict_types = 1 那么你必须将参数作为数组传递所以

public function renderView($view)
{
    $layoutContent = $this->layoutContent();
    $viewContent = $this->renderOnlyView($view);
    return str_replace(['{{content}}'], [$viewContent], strval($layoutContent));
}

你可以阅读它here