PHP8 新特性之 - 构造函数属性大加强

Laravel

新版本的PHP将于12月3日正式发布。除了大量的bug修复和小的改进,全球的开发人员也将获得一些新的有趣特性。名单虽然还没有结束,但是,我们可以查看我们期待的新特性。我将准备一系列短篇文章,每一篇都将重点介绍,让我们开始吧!

在第一篇文章中,我向大家介绍构造函数属性提升。PHP8 将引入一个在诸如 Hack、Korlin 或 TypesScript 等语言中很有名的概念。它是如何工作的呢,在什么样的情况下可以使用?让我们看看下面的例子:

Alt Text

非常简单的数值对象,不是吗?我们几乎每天都要与这种类型打交道。每当我们需要把数值从构造函数的参数传递给类中属性时,都需要书写如图所示的整块模板代码,确实是令人感到些许厌烦。 构造函数属性提升功能将会为我们解决这个问题, 并且能够让类似的代码书写更加简短,简单。 让我们来看一下该如何使用:

Alt Text

我们可以简单的在构造函数参数的类型声明前增加一个访问修饰符, 之后该参数将自动分配给具有相同名称的类属性。 我们可以理解为,构造函数中,具有访问修饰符的参数将会得到提升,成为同名称的类属性。

你可以混合使用属性提升和常规的属性声明。如下面例子所示:

示例代码

上述示例代码等效于下面例子的代码:

示例代码

构造函数属性提升(Constructor Property Promotion)仅可以用在常规类和 traits 引用类里面,它不可以被用在接口和抽象类里面(尽管我们可以在这些类里面声明构造函数)。

如果你的代码使用了大量的 值对象(VO) 或者 数据传输对象(DTO),构造函数属性提升(Constructor Property Promotion)将大大简化和缩短你的代码。类似的功能需求曾被多次讨论,但只有 Nikita Popov 编写的实现版本获得了足够多的好评,它并将被合并到新的 PHP 版本中。您可以在此 RFC 中阅读有关它的更多信息。

在“深入 PHP8”系列的下一部分,我们将讨论联合类型的实现。敬请期待!


这篇文章最初发表在我司的博客上。你可以点击这里查看

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://dev.to/avantar/dive-into-php8-pa...

译文地址:https://learnku.com/laravel/t/47600

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5
wanghan

php要搞强类型了??

3年前 评论
mengdodo 3年前
ZJalen 3年前
JackZhang 3年前

要不直接搞类似lombok的操作,反正php8支持注解

3年前 评论

有点骚 :see_no_evil:

3年前 评论

可怕

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!