PHP类型提示与可视性



protected Service $service中的protected是什么?

public function __construct(protected Service $service)
{
}

这个功能叫什么?

如果我使用protected,那么我不需要声明初始化$服务。这怎么可能?

class Sample
{
public function __construct(protected Service $service)
{
}
public function process()
{
$this->service->test();
}
}
class Service
{
public function test()
{
echo "test";
}
}
$obj = new Sample(new Service());
$obj->process();

这是在PHP 8中引入的一个短手,名为Constructor Property Promotion

之前:简单值对象的定义需要大量样板,因为所有属性都需要至少重复四次。考虑以下简单类:

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引入Constructor Property Promotion,这是一种简短的语法,它允许将属性的定义和构造函数结合起来:

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

最新更新