新版PHP已上线,要不要更新?

PHP8.1近期已上线,那么新版的PHP有些什么更改呢,我们一起来看看

PHP 8.1 对其现有语法和功能的更改:
PHP 交互式 Shell 需要 readline 扩展

MySQLi 默认错误模式设置为异常

CSV 写入函数的可自定义行尾

新version_compare操作员限制

HTML 编码和解码函数现在使用 ENT_QUOTES | ENT_SUBSTITUTE

非法紧凑函数调用警告(Warning on Illegal compact Function Calls)

资源到类对象的新迁移

PHP 交互式 Shell 需要readline扩展
PHP 的readline扩展支持交互式 shell功能,例如导航、自动完成、编辑等。虽然它与 PHP 捆绑在一起,但默认情况下未启用。

你可以使用 PHP CLI 的-a命令行选项访问 PHP 交互式 shell:

php -a

Interactive shell

php >

php > echo “Hello”;

Hello

php > function test() {

php { echo “Hello”;

php { }

php > test();

Hello

在 PHP 8.1 之前,即使没有启用readline扩展,你也可以使用 PHP CLI 打开交互式 shell。正如预期的那样,shell 的交互功能不起作用,使-a选项变得毫无意义。

在 PHP 8.1 CLI 中,如果你没有启用 readline 扩展,交互式 shell 将退出并显示错误消息。

 

php -a

Interactive shell (-a) requires the readline extension.

MySQLi 默认错误模式设置为异常
在 PHP 8.1 之前,MySQLi默认不显示错误。这种行为通常会导致代码没有遵循严格的错误/异常处理。开发人员必须实现自己的显式错误处理功能。

PHP 8.1 通过将 MySQLi 的默认错误报告模式设置为抛出异常来改变这种行为。

Fatal error: Uncaught mysqli_sql_exception: Connection refused in …:…

由于这是一个重大更改,对于 PHP <8.1 版本,你应该mysqli_report在建立第一个 MySQLi 连接之前使用该函数显式设置错误处理模式。或者,你可以通过实例化mysqli_driver实例来选择错误报告值来执行相同操作。

RFC 遵循PHP 8.0 中引入的类似更改。

CSV 写入函数的可自定义行尾
在 PHP 8.1 之前,PHP 的内置CSV写入函数fputcsv和SplFileObject::fputcsv被硬编码以\n 在每行末尾添加(或换行符)。

PHP 8.1 添加了对命名eol为这些函数的新参数的支持。你可以使用它来传递可配置的行尾字符。默认情况下,它仍然使用\n 字符。因此,你可以继续在现有代码中使用它。

标准字符转义规则适用于使用行尾字符。如果要使用\r、\n或\r\n作为 EOL 字符,必须将它们括在双引号中。

新的version_compare运营商限制
PHP 的version_compare()函数比较两个版本号字符串。此函数接受调用operator以测试特定关系的可选第三个参数。

尽管文档中没有明确介绍,但在 PHP 8.1 之前,你可以将此参数设置为部分值(例如g、l、n)而不会遇到错误。

version_compare()PHP 8.1 对函数的参数添加了更严格的限制operator来克服这种情况。你现在可以使用的唯一运算符是:

 

==、=和eq

!=、<>和ne

>和gt

>=和ge

<和lt

<=和le

不再有部分运算符值。

现在使用 HTML 编码和解码函数ENT_QUOTES | ENT_SUBSTITUTE
HTML 实体是字符的文本表示,否则将被解释为 HTML。想想像<和>这样用来定义HTML标记的字符,例如<a>、<h3>、<script>

< is & lt;(小于符号)和> is & gt;(大于符号)的 HTML 实体。

注意:删除“&”和“amp”之间的空格。

你可以在 HTML 文档中安全地使用这些 HTML 实体,而无需触发浏览器的呈现引擎。

例如,& lt;script& gt;将<script>在浏览器中显示,而不是被解释为 HTML 标记。

在 PHP 8.1 之前,htmlspecialchars()和htmlentities()函数将”、<、>和&等符号转换为它们各自的 HTML 实体。但是默认情况下,他们没有将单引号字符 ( ‘) 转换为其 HTML 实体。此外,如果文本中存在格式错误的 UTF-8,它们会返回一个空字符串。

在 PHP 8.1 中,这些 HTML 编码和解码函数(以及它们的相关函数)也会默认将单引号字符转换为它们的 HTML 实体。

如果给定文本包含无效字符,函数将用 Unicode 替换字符 (?) 替换它们,而不是返回空字符串。PHP 8.1 通过将这些函数的签名更改为ENT_QUOTES | ENT_SUBSTITUTE而不是ENT_COMPAT默认来实现这一点。

大多数框架已经将ENT_QUOTES其用作默认标志值。因此,由于此更改,你不会看到太大的差异。然而,新ENT_SUBSTITUTE标志并没有被广泛使用。PHP 8.1 将导致无效的 UTF-8 字符被替换为 ? 字符,而不是返回空字符串。

非法紧凑函数调用警告
PHP的compact()功能超级好用。你可以使用它来使用变量的名称和值创建一个数组。

例如,考虑以下代码:

$animal = ‘Cat’;

$sound = ‘Meow’;

$region = ‘Istanbul’;

compact(‘animal’, ‘sound’, ‘region’);

// [‘animal’ => “Cat”, ‘sound’ => “Meow”, ‘region’ => “Istanbul”]

compact 函数的文档指出它只接受字符串参数或带有字符串值的数组值。但是,在 PHP 7.3 之前,任何未设置的字符串都将被静默跳过。

PHP 7.3 修改了这个compact()函数,如果你使用未定义的变量会抛出一个通知。PHP 8.1 更进一步并发出警告。

你可以阅读其 GitHub 页面以了解此更改是如何发生的。

从资源到类对象的新迁移
PHP 的长期目标之一是从资源转向标准类对象。

由于历史原因,资源对象在 PHP 应用程序中被广泛使用。因此,资源到类对象的迁移需要尽可能减少破坏性。PHP 8.1 迁移了五个这样的资源:

file_info迁移到finfo对象的资源

PHP 的finfo 类为函数提供了一个面向对象的接口fileinfo。但是,使用finfo函数会返回resource具有类型的对象,file_info而不是finfo类本身的实例。

PHP 8.1 修复了这个异常。

迁移到IMAP\Connection类对象的 IMAP 资源

根据资源到对象的迁移目标,IMAP\Connection当 PHP 最终修改类的实现细节时,新类将潜在的破坏性更改降至最低。

这个新类也被声明final了,所以你不能这样extend。

FTP 连接资源现在是FTP\Connection类对象

在 PHP <8.1 中,如果你使用or函数创建FTP 连接,你将获得ftp类型的资源对象。ftp_connect()ftp_ssl_connect()

PHP 8.1 添加了新的FTP\Connection类来纠正这个问题。和类一样IMAP\Connection,它也被声明final为防止它被扩展。

迁移到GdFont类对象的字体标识符

PHP 的 GD 扩展提供了imageloadfont() 函数来加载用户定义的位图并返回其字体标识符资源 ID(整数)。

在 PHP 8.1 中,此函数将改为返回GdFont类实例。此外,为了使迁移无忧,以前接受资源 ID 的所有函数imageloadfont()现在都将采用新的GdFont类对象。

迁移到对象的 LDAP 资源

LDAP或轻量级目录访问协议用于访问“目录服务器”。就像硬盘目录结构一样,它是一个独特的数据库,以树状结构保存数据。

PHP 包含一个 LDAP 扩展,它在 PHP 8.1 之前接受或返回资源对象。但是,它们现在都已无缝迁移到新的类实例。已转换的资源类型有:

ldap link资源到\LDAP\Connection类对象

ldap result资源到\LDAP\Result类对象

ldap result entry资源到\LDAP\ResultEntry类对象

Pspell 资源现在是类对象
PHP 的Pspell 扩展允许你检查拼写和单词建议。

PHP <8.1 已使用pspell和pspell config具有整数标识符的资源对象类型。这两个资源对象现在被替换为PSpell\Dictionary和PSpell\Config类对象。

与之前的迁移一样,之前接受或返回资源对象标识符的所有 Pspell 函数都将采用新的类对象实例。

以上信息部分来源于互联网

原创文章,作者:陌涛,如若转载,请注明出处:https://imotao.com/6976.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
陌涛陌涛
上一篇 2022年12月4日 下午4:12
下一篇 2022年12月5日 下午9:09

相关推荐

  • 庆祝RNG夺冠 免费领夺冠图标永久皮肤

    英雄联盟完成一局游戏免费领图标和永久皮肤 在RNG夺冠后,英雄联盟又送皮肤啦!在5月28日-5月30日期间,完成1场任意游戏模式的对局 然后登录掌上英雄联盟,即可随机抽取1个永久皮…

    2021年5月29日
    47300
  • TB淘宝店铺被恶意举报封店强制恢复方法分享

    试问哪个店铺没被恶意举报封过?此方法仅供学习参考,淘宝本身就不是一个绝对公平的平台,哪个平台也做不到绝对公平 TB淘宝店铺被恶意举报封店强制恢复方法分享: 需要APP:淘宝主播 需…

    2020年4月14日
    48000
  • Waifu2x Extension-GUI v3.73.14

    软件介绍 这是一款功能强大的图片放大清晰处理软件,软件采用waifu2x的技术,可以帮助用户对各种图片进行放大和降噪,同时不会降低图片质量,同时还支持优化GIF动图和视频。 软件截…

    2021年8月6日
    50200
  • Steam喜加一免费领取《简单的故事—Alex》

    Steam喜加一免费领取《简单的故事—Alex》 这是一款冒险类游戏,这是一个简短的互动故事,亚历克斯,一个普通的失败者 这是制作者КиКо制作的第一款游戏,使用了RPG Make…

    2020年3月25日
    40600
  • 支付宝马云提“福”字 扫字基本必中沾福气卡

    支付宝马云提“福”字 扫字基本必中沾福气卡 支付宝官方微博 发布文章 马总提了一个“福”字 也说明扫这个字有另外的惊喜 小编测试几个号 扫了以后都可以得沾福气卡 大家速度去试试 支…

    2020年1月15日
    67600
  • LM Studio本地部署教程

    LM Studio 功能比 ollama 更强一些,而且有 UI 界面可以直接使用,更适合新手小白。因此,更加推荐大家尝试和使用这个软件去部署本地大模型。 官网:lmstudio.…

    2025年2月2日
    2.7K00
  • 如何对Linux系统服务器的路由追踪及回程路由追踪进行测试

    关于Linux系统服务器(VPS)性能、带宽的测试脚本有很多,陌涛遇到好的脚本都做过分享,分享到博客的主要原因是方便大家使用和方便自己日后使用时可以查找。 在此文章中陌涛主要介绍如…

    2021年4月23日
    46800
  • 深入认识二进制序列化

    一 概要 二进制序列化是公司内部自研微服务框架的主要的数据传输处理方式,但是普通的开发人员对于二进制的学习和了解并不深入,容易导致使用过程中出现了问题却没有分析解决的思路。本文从一…

    2019年8月20日
    57500
  • 免费领取7天腾讯手游加速器

    手机应用商店搜索下载“腾讯加速器”->弹窗新用户登录就送->老用户换号登录就行!

    2020年5月1日
    78500
  • 高通骁龙骁友会答题抽红包 附部分答案

    高通骁龙骁友会答题抽红包 附部分答案 微信小程序搜索【高通骁龙骁友会】 进入小程序点击首页顶部的【寻找最强骁友】进去答题 答对5次抽一次红包,最高5.8元,有三次复活机会,随便分享…

    2021年3月25日
    42300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

docker镜像已更新为 https://0-docker.nat.tf/