修改部分格式错误

修改理由:
此投稿已在 3年前 合并。
标题修改:
标签修改:
内容修改:
Old | New | Differences |
---|---|---|
1 | ||
2 | 1 | PHP 8.1 已经在 [2021 年 11 月 25 日](https://wiki.php.net/todo/php81) 发布,在文章中,在本文中,我们将逐一介绍所有功能、性能改进、更改和弃用。 |
3 | 2 | |
4 | 3 | ## 新特性 | … | … |
19 | 18 | } |
20 | 19 | ``` |
21 | 20 | |
22 | ||
23 | ||
21 | ||
22 | ||
24 | 23 | 以下是它们的使用方式: |
25 | 24 | |
26 | 25 | ``` | … | … |
39 | 38 | $post->setStatus(Status::Active); |
40 | 39 | ``` |
41 | 40 | |
42 | 你可以在 [这篇文章](https://stitcher.io/blog/ | |
41 | 你可以在 [这篇文章](https://stitcher.io/blog/php-enumS) 中找到如何使用枚举的深入分析。 | |
43 | 42 | |
44 | 43 | * * * * * |
45 | 44 | … | … |
65 | 64 | |
66 | 65 | * * * * * |
67 | 66 | |
68 | ||
69 | ||
67 | ||
68 | ||
70 | 69 | ### 性能提升 PR |
71 | 70 | |
72 | 71 | … | … |
92 | 91 | |
93 | 92 | * * * * * |
94 | 93 | |
95 | ||
96 | ||
94 | ||
95 | ||
97 | 96 | ### RFC的初始值设定项中出现`new` |
98 | 97 | |
99 | 98 | 此RFC允许您在函数定义中使用关键字 `new` 作为默认参数,也可以在属性参数等地方使用。 | … | … |
106 | 105 | } |
107 | 106 | ``` |
108 | 107 | |
109 | 您可以在[这篇专题文章](https://stitcher | |
108 | 您可以在[这篇专题文章](https://stitcher.io/blog/php-81-new-in-initializers)中阅读关于此功能的所有内容。 | |
110 | 109 | |
111 | 110 | * * * * * |
112 | 111 | … | … |
137 | 136 | |
138 | 137 | * * * * * |
139 | 138 | |
140 | ||
141 | ||
142 | 你想了解更多关于PHP 8.1吗?有 | |
139 | ||
140 | ||
141 | 你想了解更多关于PHP 8.1吗?有[PHP 8.1之路](https://road-to-php.com/)。在接下来的十天里,你每天会收到邮件覆盖新的PHP 8.1和退出功能;之后你会自动unsubscribed所以没有垃圾邮件或跟踪。[现在就订阅!](https://road-to-php.com/) | |
143 | 142 | |
144 | 143 | ### 一流的可调用语法RFC |
145 | 144 | … | … |
165 | 164 | } |
166 | 165 | ``` |
167 | 166 | |
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` 中实现它,交叉类型解决了这种额外的开销。 | |
172 | 170 | |
173 | 171 | * * * * * |
174 | 172 | … | … |
193 | 191 | |
194 | 192 | ### 新函数 `array_is_list` RFC |
195 | 193 | |
196 | 你可能偶尔需要处理类似这样的问题:确定数组的键是否从索引0开始按数字顺序排列。例如 `json_ | |
197 | ||
198 | ||
194 | 你可能偶尔需要处理类似这样的问题:确定数组的键是否从索引0开始按数字顺序排列。例如 `json_encode` 需要决定将 json 转换为数组还是对象。 | |
195 | ||
196 | ||
199 | 197 | PHP 8.1添加了一个内置函数来确定数组是否是具有这些语义的列表: |
200 | 198 | |
201 | 199 | ``` | … | … |
261 | 259 | fclose($file); |
262 | 260 | ``` |
263 | 261 | |
264 | ||
265 | ||
262 | ||
263 | ||
266 | 264 | 因为磁盘同步是一个文件系统操作,所以`fsync`函数将只对普通文件流起作用。尝试同步非文件流将发出警告。 |
267 | 265 | |
268 | 266 | * * * * * | … | … |
291 | 289 | 或者应该使用 #[ReturnTypeWillChange] 属性暂时隐藏通知 |
292 | 290 | ``` |
293 | 291 | |
294 | ||
295 | ||
292 | ||
293 | ||
296 | 294 | 你可能注意到了,这个错误信息会在使用 `phpunit/phpunit`、`symfony/finder` 和其他流行的开源包中出现。实际是因为内部函数开始使用正确的返回类型。如果想要从标准库(如`IteratorAggregate`)中继承一个类,这时还需要添加返回类型。 |
297 | 295 | |
298 | 296 | 修复方法很简单:如果第三方软件包中出现错误,请更新软件包的代码(其中大多数已在最新版本中修复)。如果代码中出现错误,您可以添加 `ReturnTypeWillChange` 属性,在 PHP 9.0 之前抑制这些错误。下面是一个类扩展 `DateTime` 的示例: | … | … |
311 | 309 | } |
312 | 310 | ``` |
313 | 311 | |
314 | ||
315 | ||
312 | ||
313 | ||
316 | 314 | 或者你可以添加返回类型: |
317 | 315 | |
318 | 316 | ``` | … | … |
329 | 327 | |
330 | 328 | ### 限制 `$GLOBALS` 的使用 RFC |
331 | 329 | |
332 | 一个对于 `$GLOBALS` 使用方式的小更改将对所有阵列操作的性能产生重大影响。Nikita 在 [RFC](https://wiki.php.net/rfc/restrict_globals_usage) 中很好地解释了问题和解决方案。这个变动意味着 `$GLOBALS` 不会在一些边缘情况下做出什么事情了。* | |
330 | 一个对于 `$GLOBALS` 使用方式的小更改将对所有阵列操作的性能产生重大影响。Nikita 在 [RFC](https://wiki.php.net/rfc/restrict_globals_usage) 中很好地解释了问题和解决方案。这个变动意味着 `$GLOBALS` 不会在一些边缘情况下做出什么事情了。*$GLOBALS 不再支持整体写入. 下面的做法都将报错*。 | |
333 | 331 | |
334 | 332 | ``` |
335 | 333 | $GLOBALS = []; | … | … |
345 | 343 | by_ref($GLOBALS); |
346 | 344 | ``` |
347 | 345 | |
348 | ||
349 | ||
346 | ||
347 | ||
350 | 348 | Nikita分析了Packagist上排名前2000的包, 只发现了23个会受到这一变化的影响。我们可以得出结论,这种技术突破性变化的影响将很小,这就是为什么内部决定在PHP 8.1中添加它。请记住,考虑到这一变化对我们代码中的每个地方都有积极的性能影响,我们中的大多数人都将从这一更改中获益。 |
351 | 349 | |
352 | 350 | ### 资源到对象的迁移 | … | … |
357 | 355 | |
358 | 356 | `finfo_file`、`finfo_open`等函数用于接受和返回资源。从PHP8.1开始,它们可以使用所有的[`finfo`](https://www.php.net/manual/en/class.finfo.php)对象。 |
359 | 357 | |
360 | ||
361 | ||
362 | ** | |
358 | ||
359 | ||
360 | **具有`IMAPConnection` 对象的 IMAP 函数** | |
363 | 361 | |
364 | 362 | 就像 fileinfo 的改变一样,IMAP 函数如 `imap_body` 和 `imap_open` 不再使用资源 |
365 | 363 | … | … |
383 | 381 | |
384 | 382 | > PHP 本身允许自动复活(根据 falsey 值自动创建数组)。这个特性非常有用,在许多 PHP 项目中都有使用,特别是在变量未定义的情况下。但是,有一点奇怪,允许从 false 和 null 值创建数组。 |
385 | 383 | |
386 | ||
387 | ||
384 | ||
385 | ||
388 | 386 | 您可以在 RFC 页面上阅读详细信息。总之,不推荐使用这种行为: |
389 | 387 | |
390 | 388 | ``` | … | … |
413 | 411 | |
414 | 412 | * * * * * |
415 | 413 | |
414 | ||
415 | ||
416 | 现在就是这样,记住我会在一年中定期更新这篇文章,所以如果你想要随时了解的话,一定要[订阅](https://stitcher.io/newsletter/subscribe)。你对 PHP 8.1感到兴奋吗?在[Twitter](https://twitter.com/brendt_gd)上告诉我! | |
416 | 417 | |
417 | ||
418 | ||
419 |