PHP 8.1迁移后str_replace()空值参数弃用错误如何解决?
问题分析
PHP 8.1 开始严格限制 str_replace() 的参数类型,第三个参数($subject)不再允许传入 null。你的代码中,filter_input(INPUT_GET, 'request') 当不存在 request 这个 GET 参数时会返回 null,直接传入 str_replace() 就触发了弃用警告。
你之前尝试在 str_replace() 参数里用 $url ?? "",但如果代码中存在 HTML 转义的引号(比如示例里的 "")会导致语法错误,无法正确将 null 转为空字符串,所以警告依然存在。
解决代码
<?php namespace core; use src\Config; class Request { public static function getUrl() { // 提前将$url初始化为非空字符串,避免null传入str_replace $url = filter_input(INPUT_GET, 'request') ?? ''; $url = str_replace(Config::BASE_DIR, '', $url); return '/'.$url; } public static function getMethod() { return strtolower($_SERVER['REQUEST_METHOD']); } }
关键说明
- 在赋值阶段就用
?? ''处理filter_input的返回值,确保$url始终是字符串类型,彻底避免null传入str_replace()。 - 额外检查
Config::BASE_DIR的值,如果它是null,也可能触发类似的参数类型警告,建议确保其为字符串类型。
内容的提问来源于stack exchange,提问作者Patric Oliveira
相关产品推荐
相关产品推荐

