在 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'
有人对此有解决方案吗?
在不完全了解您代码的其他部分的情况下,这只是我的猜测,但请尝试修改您的 renderOnlyView
和 layoutContent
函数,如下所示:
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
我正在尝试将我的小项目移动到 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'
有人对此有解决方案吗?
在不完全了解您代码的其他部分的情况下,这只是我的猜测,但请尝试修改您的 renderOnlyView
和 layoutContent
函数,如下所示:
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