这是一个利国利民的好特性,可以延长键盘的寿命……PHP 8以前,我们定义一个类时,可能会从构造函数里接收大量参数并赋值给类属性,如:

class Point {
  public float $x;
  public float $y;
  public float $z;
 
  public function __construct(
    float $x = 0.0,
    float $y = 0.0,
    float $z = 0.0,
  ) {
    $this->x = $x;
    $this->y = $y;
    $this->z = $z;
  }
}

实际上这已经形成了一种范式,我们要不厌其烦地进行定义->传递->赋值的过程。PHP 8以后给出了一种更加简单的语法:

class Point {
  public function __construct(
    public float $x = 0.0,
    public float $y = 0.0,
    public float $z = 0.0,
  ) {}
}

直接在构造函数的参数列表位置完成了类属性的定义与赋值的过程,减少了大概三分之二的代码量。

另外提一句,这个RFC的作者是Nikita Popov,也就是著名的开源项目PHP-Parser的作者,做PHP代码分析的同学应该经常和这个项目打交道。他今年去了PHPStorm团队,相信这个老牌IDE在Nikita的加持下会变得更加好用。