marun 3年前

修改理由:

修改部分格式错误

此投稿已在 3年前 合并。

标题修改:

+ PHP8.1 正式发布,来看下有哪些新功能

标签修改:

+

内容修改:

红色背景 为原始内容

绿色背景 为新增或者修改的内容

OldNewDifferences
1  
21PHP 8.1 已经在 [2021 年 11 月 25 日](https://wiki.php.net/todo/php81) 发布,在文章中,在本文中,我们将逐一介绍所有功能、性能改进、更改和弃用。
32
43## 新特性
 
1918}
2019```
2120
22 
23 
 21
 22
2423以下是它们的使用方式:
2524
2625```
 
3938$post->setStatus(Status::Active);
4039```
4140
42 你可以在 [这篇文章](https://stitcher.io/blog/PHP-enum) 中找到如何使用枚举的深入分析。
 41你可以在 [这篇文章](https://stitcher.io/blog/php-enumS) 中找到如何使用枚举的深入分析。
4342
4443* * * * *
4544
 
6564
6665* * * * *
6766
68 
69 
 67
 68
7069### 性能提升 PR
7170
7271
 
9291
9392* * * * *
9493
95 
96 
 94
 95
9796### RFC的初始值设定项中出现`new`
9897
9998此RFC允许您在函数定义中使用关键字 `new` 作为默认参数,也可以在属性参数等地方使用。
 
106105}
107106```
108107
109 您可以在[这篇专题文章](https://stitcher . io/blog/PHP-81-new-in-initializer)中阅读关于此功能的所有内容。
 108您可以在[这篇专题文章](https://stitcher.io/blog/php-81-new-in-initializers)中阅读关于此功能的所有内容。
110109
111110* * * * *
112111
 
137136
138137* * * * *
139138
140 
141 
142 你想了解更多关于PHP 8.1吗?有(PHP 8.1之路)(https://road-to-php.com/)。在接下来的十天里,你每天会收到邮件覆盖新的PHP 8.1和退出功能;之后你会自动unsubscribed所以没有垃圾邮件或跟踪。(现在就订阅!)(https://road-to-php.com/)
 139
 140
 141你想了解更多关于PHP 8.1吗?有[PHP 8.1之路](https://road-to-php.com/)。在接下来的十天里,你每天会收到邮件覆盖新的PHP 8.1和退出功能;之后你会自动unsubscribed所以没有垃圾邮件或跟踪。[现在就订阅!](https://road-to-php.com/)
143142
144143### 一流的可调用语法RFC
145144
 
165164}
166165```
167166
168 
169 
170 如果你喜欢这种代码风格,你需要创建一个新的接口 `Sluggable`,并在 `$post` 中实现它,
171 If you like this style of programming, you'd need to create a new interface `Sluggable` and implement it in `$post`, 交叉类型解决了这种额外的开销。
 167
 168
 169如果你喜欢这种代码风格,你需要创建一个新的接口 `Sluggable`,并在 `$post` 中实现它,交叉类型解决了这种额外的开销。
172170
173171* * * * *
174172
 
193191
194192### 新函数 `array_is_list` RFC
195193
196 你可能偶尔需要处理类似这样的问题:确定数组的键是否从索引0开始按数字顺序排列。例如 `json_ encode` 需要决定将 json 转换为数组还是对象。
197 
198 
 194你可能偶尔需要处理类似这样的问题:确定数组的键是否从索引0开始按数字顺序排列。例如 `json_encode` 需要决定将 json 转换为数组还是对象。
 195
 196
199197PHP 8.1添加了一个内置函数来确定数组是否是具有这些语义的列表:
200198
201199```
 
261259fclose($file);
262260```
263261
264 
265 
 262
 263
266264因为磁盘同步是一个文件系统操作,所以`fsync`函数将只对普通文件流起作用。尝试同步非文件流将发出警告。
267265
268266* * * * *
 
291289或者应该使用 #[ReturnTypeWillChange] 属性暂时隐藏通知
292290```
293291
294 
295 
 292
 293
296294你可能注意到了,这个错误信息会在使用 `phpunit/phpunit`、`symfony/finder` 和其他流行的开源包中出现。实际是因为内部函数开始使用正确的返回类型。如果想要从标准库(如`IteratorAggregate`)中继承一个类,这时还需要添加返回类型。
297295
298296修复方法很简单:如果第三方软件包中出现错误,请更新软件包的代码(其中大多数已在最新版本中修复)。如果代码中出现错误,您可以添加 `ReturnTypeWillChange` 属性,在 PHP 9.0 之前抑制这些错误。下面是一个类扩展 `DateTime` 的示例:
 
311309}
312310```
313311
314 
315 
 312
 313
316314或者你可以添加返回类型:
317315
318316```
 
329327
330328### 限制 `$GLOBALS` 的使用 RFC
331329
332 一个对于 `$GLOBALS` 使用方式的小更改将对所有阵列操作的性能产生重大影响。Nikita 在 [RFC](https://wiki.php.net/rfc/restrict_globals_usage) 中很好地解释了问题和解决方案。这个变动意味着 `$GLOBALS` 不会在一些边缘情况下做出什么事情了。* $GLOBALS 不再支持整体写入. 下面的做法都将报错。*
 330一个对于 `$GLOBALS` 使用方式的小更改将对所有阵列操作的性能产生重大影响。Nikita 在 [RFC](https://wiki.php.net/rfc/restrict_globals_usage) 中很好地解释了问题和解决方案。这个变动意味着 `$GLOBALS` 不会在一些边缘情况下做出什么事情了。*$GLOBALS 不再支持整体写入. 下面的做法都将报错*。
333331
334332```
335333$GLOBALS = [];
 
345343by_ref($GLOBALS);
346344```
347345
348 
349 
 346
 347
350348Nikita分析了Packagist上排名前2000的包, 只发现了23个会受到这一变化的影响。我们可以得出结论,这种技术突破性变化的影响将很小,这就是为什么内部决定在PHP 8.1中添加它。请记住,考虑到这一变化对我们代码中的每个地方都有积极的性能影响,我们中的大多数人都将从这一更改中获益。
351349
352350### 资源到对象的迁移
 
357355
358356`finfo_file`、`finfo_open`等函数用于接受和返回资源。从PHP8.1开始,它们可以使用所有的[`finfo`](https://www.php.net/manual/en/class.finfo.php)对象。
359357
360 
361 
362 ** 具有`IMAPConnection` 对象的 IMAP 函数**
 358
 359
 360**具有`IMAPConnection` 对象的 IMAP 函数**
363361
364362就像 fileinfo 的改变一样,IMAP 函数如 `imap_body` 和 `imap_open` 不再使用资源
365363
 
383381
384382> PHP 本身允许自动复活(根据 falsey 值自动创建数组)。这个特性非常有用,在许多 PHP 项目中都有使用,特别是在变量未定义的情况下。但是,有一点奇怪,允许从 false 和 null 值创建数组。
385383
386 
387 
 384
 385
388386您可以在 RFC 页面上阅读详细信息。总之,不推荐使用这种行为:
389387
390388```
 
413411
414412* * * * *
415413
 414  
 415  
 416现在就是这样,记住我会在一年中定期更新这篇文章,所以如果你想要随时了解的话,一定要[订阅](https://stitcher.io/newsletter/subscribe)。你对 PHP 8.1感到兴奋吗?在[Twitter](https://twitter.com/brendt_gd)上告诉我!  
416417
417  
418 现在就是这样,记住我会在一年中定期更新这篇文章,所以如果你想要随时了解的话,一定要[订阅](https://stitcher.io/newsletter/subscribe)。你对 PHP 8.1感到兴奋吗?在[Twitter](https://twitter.com/brendt_gd)上告诉我! 
419