0

0

PHP7转PHP8弃用函数怎么换_nullsafe与str_contains替代【技巧】

看不見的法師

看不見的法師

发布时间:2026-02-05 13:34:31

|

273人浏览过

|

来源于php中文网

原创

PHP 8 中应使用空安全操作符 $user?->getName()?->trim() 替代 is_null($var) && $var->method(),它在任一环节为 null 时静默返回 null;strpos() 建议替换为 str_contains() 避免类型误判;注意 utf8_encode/decode 等函数已弃用,版本比较须用 version_compare()。

php7转php8弃用函数怎么换_nullsafe与str_contains替代【技巧】

PHP 8 里 is_null($var) && $var->method() 怎么安全改写

PHP 8 不再允许在 null 值上调用方法,直接报 Fatal error: Uncaught Error: Call to a member function ... on null。以前靠 is_null()!isset() 手动判断再调用,现在推荐用空安全操作符 ?-> 替代——它不是“替代 is_null”,而是替代整个“判空 + 调用”的组合逻辑。

常见错误写法:if (!is_null($user)) { $name = $user->getName(); } → 冗余且易漏判嵌套属性

  • $name = $user?->getName()?->trim();:任一环节为 null,整条链返回 null,不报错
  • 不能用于静态调用、newcloneisset() 等场景,仅限对象实例方法和属性访问
  • 返回值类型需注意:原本可能抛异常的地方,现在静默返回 null,下游要兼容 null 类型(尤其启用了严格类型时)

PHP 7 的 strpos($str, 'abc') !== false 必须换成 str_contains()

不是“必须”,但强烈建议换。PHP 8.0 引入 str_contains() 就是为解决 strpos 易错问题:它返回 int|false,而 == 判定会因类型转换导致误判(如 strpos('abc', 'a') == 0 为 true,但 === false 才是正确写法)。

  • 直接替换:str_contains($str, 'abc') 返回布尔值,语义清晰,无类型陷阱
  • 注意:只支持字符串参数,不接受数组或 null;若输入可能为 null,需提前过滤,否则抛 TypeError
  • 性能几乎无差异,底层仍走优化过的字节扫描,不必担心变慢

还有哪些 PHP 7 常用函数在 PHP 8 被标记弃用或移除

除了 create_function()(已移除)、each()(已移除)、mysql_* 系列(早被废弃),迁移时高频踩坑的还有:

拍我AI
拍我AI

AI视频生成平台PixVerse的国内版本

下载

立即学习PHP免费学习笔记(深入)”;

  • utf8_encode() / utf8_decode():仅处理 ISO-8859-1 编码,PHP 8.2 起弃用;统一用 mb_convert_encoding($str, 'UTF-8', 'ISO-8859-1')
  • get_magic_quotes_gpc():PHP 5.4 已移除,但老项目残留判断会报 Undefined function;直接删掉整段逻辑即可
  • phpversion() 检查版本时写成 phpversion() >= '8' 会出错(字符串比较);应改用 version_compare(phpversion(), '8.0.0', '>=')

升级后运行正常,但某些地方行为变了却没报错,怎么排查

PHP 8 引入了更严格的类型推导和错误抑制策略,有些“原来能跑”的代码只是侥幸没触发边界条件。重点盯这些点:

  • 函数参数类型声明(如 function foo(string $s)):PHP 7 可能容忍传 null 或 int,PHP 8 直接 TypeError;检查所有调用处是否满足类型约束
  • json_encode() 对资源、NaNINF 的处理:PHP 8 默认返回 false 并触发 E_WARNING,而 PHP 7 可能静默转为空字符串
  • 错误报告级别:确保 error_reporting 开启 E_DEPRECATED,否则弃用警告(如 preg_replace()/e 修饰符)会被忽略

空安全操作符看着省事,但容易掩盖本该显式处理的空值路径;str_contains() 看似简单,可一旦参数来源不可控,null 传进去就直接崩——这些不是语法糖,是契约变更。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

584

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

238

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

560

2024.03.01

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

794

2023.08.22

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

289

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

317

2023.10.25

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

381

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

213

2023.09.04

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.1万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 823人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号