marun 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 
 139
 140
142141你想了解更多关于PHP 8.1吗?有(PHP 8.1之路)(https://road-to-php.com/)。在接下来的十天里,你每天会收到邮件覆盖新的PHP 8.1和退出功能;之后你会自动unsubscribed所以没有垃圾邮件或跟踪。(现在就订阅!)(https://road-to-php.com/)
143142
144143### 一流的可调用语法RFC
 
165164}
166165```
167166
168 
169 
 167
 168
170169如果你喜欢这种代码风格,你需要创建一个新的接口 `Sluggable`,并在 `$post` 中实现它,
171170If you like this style of programming, you'd need to create a new interface `Sluggable` and implement it in `$post`, 交叉类型解决了这种额外的开销。
172171
 
194193### 新函数 `array_is_list` RFC
195194
196195你可能偶尔需要处理类似这样的问题:确定数组的键是否从索引0开始按数字顺序排列。例如 `json_ encode` 需要决定将 json 转换为数组还是对象。
197 
198 
 196
 197
199198PHP 8.1添加了一个内置函数来确定数组是否是具有这些语义的列表:
200199
201200```
 
261260fclose($file);
262261```
263262
264 
265 
 263
 264
266265因为磁盘同步是一个文件系统操作,所以`fsync`函数将只对普通文件流起作用。尝试同步非文件流将发出警告。
267266
268267* * * * *
 
291290或者应该使用 #[ReturnTypeWillChange] 属性暂时隐藏通知
292291```
293292
294 
295 
 293
 294
296295你可能注意到了,这个错误信息会在使用 `phpunit/phpunit`、`symfony/finder` 和其他流行的开源包中出现。实际是因为内部函数开始使用正确的返回类型。如果想要从标准库(如`IteratorAggregate`)中继承一个类,这时还需要添加返回类型。
297296
298297修复方法很简单:如果第三方软件包中出现错误,请更新软件包的代码(其中大多数已在最新版本中修复)。如果代码中出现错误,您可以添加 `ReturnTypeWillChange` 属性,在 PHP 9.0 之前抑制这些错误。下面是一个类扩展 `DateTime` 的示例:
 
311310}
312311```
313312
314 
315 
 313
 314
316315或者你可以添加返回类型:
317316
318317```
 
345344by_ref($GLOBALS);
346345```
347346
348 
349 
 347
 348
350349Nikita分析了Packagist上排名前2000的包, 只发现了23个会受到这一变化的影响。我们可以得出结论,这种技术突破性变化的影响将很小,这就是为什么内部决定在PHP 8.1中添加它。请记住,考虑到这一变化对我们代码中的每个地方都有积极的性能影响,我们中的大多数人都将从这一更改中获益。
351350
352351### 资源到对象的迁移
 
357356
358357`finfo_file`、`finfo_open`等函数用于接受和返回资源。从PHP8.1开始,它们可以使用所有的[`finfo`](https://www.php.net/manual/en/class.finfo.php)对象。
359358
360 
361 
 359
 360
362361** 具有`IMAPConnection` 对象的 IMAP 函数**
363362
364363就像 fileinfo 的改变一样,IMAP 函数如 `imap_body` 和 `imap_open` 不再使用资源
 
383382
384383> PHP 本身允许自动复活(根据 falsey 值自动创建数组)。这个特性非常有用,在许多 PHP 项目中都有使用,特别是在变量未定义的情况下。但是,有一点奇怪,允许从 false 和 null 值创建数组。
385384
386 
387 
 385
 386
388387您可以在 RFC 页面上阅读详细信息。总之,不推荐使用这种行为:
389388
390389```
 
413412
414413* * * * *
415414
 415  
 416  
 417现在就是这样,记住我会在一年中定期更新这篇文章,所以如果你想要随时了解的话,一定要[订阅](https://stitcher.io/newsletter/subscribe)。你对 PHP 8.1感到兴奋吗?在[Twitter](https://twitter.com/brendt_gd)上告诉我!  
416418
417  
418 现在就是这样,记住我会在一年中定期更新这篇文章,所以如果你想要随时了解的话,一定要[订阅](https://stitcher.io/newsletter/subscribe)。你对 PHP 8.1感到兴奋吗?在[Twitter](https://twitter.com/brendt_gd)上告诉我! 
419