php8新功能可以干嘛,PHP8中都在增加什么有趣的新特性?

导读:PHP8会让我们写代码的方式焕然一新。

68243c6491c7d2577bc27316c3bfccd1.png

各位广大干部农工同志们,PHP8的正式版本将于2020年11月26日正式发布,届时它的全部闪光特性都将稳定地并全部可用。

本文撰写在PHP8 时仍处 Alpha阶段,这表示后面仍然会有功能更新。以下是我总结的新功能概要,来瞧瞧这些功能对开发者来说意味着啥。

一 属性

毫无疑问,属性是PHP语言的最大补充。

属性有助于将元数据添加到函数、参数、类、方法、常量、属性等。这些东西在之前是通过docblock模拟的,然后通过其它地方来解析。

如今,属性可是PHP中的一等公民,并且可以通过编程进行访问。

请看如下代码:

@@Route(Http::POST, '/store/123/item')

class ItemCreateHandler

{

public function __invoke() {

// ...

}

}

目前,PHP的属性之概念仍然不断进化,虽然已经定下从<

他说本人更喜欢Rust的方法: #[FooAttribute]

25402e5eb648cc249d27f6b6b9aa2c79.png

Derick说的的确如此,社区也表示认可。这表明属性在功能冻结期间仍然有可能会更新RFC。不论哪种方式,我们都不能否认属性是PHP开发者们欢迎的功能。

面向对象更新

现在我们经常写构造方法,代码是这样式儿写的:

class Response {

private int $code;

private string $body;

private array $headers;

public function __construct(int $code, string $body, array $headers) {

$this->code = $code;

$this->body = $body;

$this->headers = $headers;

}

}

人们也习以为常,习惯了如此方式。而在PHP8中,可以这样简写:

class Response {

public function __construct(

private int $code,

private string $body,

private array $headers,

) {}

}

是不是变得更整齐了?

match表达式

你可能以前也写过很复杂的Switch语句和表达式,比如下面这样的代码:

switch ($x) {

case 1:

$y = 3;

break;

case 2:

$y = 4

break;

case 3: case 4:

$y = 5;

break;

...

default:

throw new \RuntimeException('Not happening, bud');

}

还是有点太长了。现在,人们可以用更简短的match表达式:、

$y = match ($x) {

1 => 3,

2 => 4,

3, 4 => 5,

...

default => throw new \RuntimeException('Not happening, bud'),

}

match表达式可能是受到ES6的启发,让每个匹配的案例仅包含一个表达式,同时也包含一个隐式的break表达式。

联合类型

PHP是一个动态类型语言。使用联合类型将可为参数或返回值类型指定2个或更多可接受的类型。

目前PHP支持两种特殊联合类型,Type/null以及array/Traversable。

现在我们来代替phpdoc处理类型,使用如下代码:

class Number {

private int|float $number;

public function setNumber(int|float $number): void {

$this->number = $number;

}

public function getNumber(): int|float {

return $this->number;

}

}

也可以使用null:

public function handle(Product|null $product): int

// equals

public function handle(?Product $product): int

命名参数

命名参数允许基于参数名称,而不再是基于参数位置来将值传递给参数。如下代码示例:

// Positional arguments

json_encode($data, 0, 512);

// Named arguments

json_encode(value: $data, options: 0, depth: 512);

开发者可以选择自己喜欢的任一种。

小结

直到今,PHP8 仍然在更新中,社区也欢迎更多的改良意见。可以预见的是,新版本的PHP将会让我们写PHP代码的方式焕然一新!

作者:洛逸

来源:21CTO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值