PHP8.0新特性之Constructor property promotion(构造器属性提升)

作者: 温新

分类: 【PHP基础】

阅读: 1820

时间: 2022-01-25 12:04:03

PHP8.0中构造器属性提升可以简化类中属性声明并进行初始化赋值的操作。

PHP7中的写法:

class Person
{
	public string $name;
	public int $age;

	public function __construct(string $name, ing $age)
	{
		$this->name = $name;
		$this->age  = $age;
	}
}

可以看到,在PHP7中,需要两个步骤,先声明再赋值。

PHP8构造属性提升

普通类中使用

class Person
{
	// PHP8构造器属性提升
    public function __construct(public string $name, public int $age)
	{
	}
}

这样就完成初始化赋值,最少的代码干最多的事。

Traits中使用

trait CommonFunc
{
	public function __construct(public string $name)
	{
	}
} 

构造器属性注意点

1)必须有修饰符且修饰符不能是var

// 错误案例
class Person
{
	public function __construct(var string $name, $age)
	{
		echo $this->age;
	}
}

// 正确案例
class Person
{
	public function __construct(public string $name, protected int $age)
	{
	}
}

2)抽象类或接口不能使用属性构造器提升

// 错误
abstract class Person
{
	public abstract function __construct(public string $name;)
}

// 错误
interface class Person
{
	public function __construct(public string $name;)
}

3)默认值不能是 null

// 错误
class Person
{
    public function __construct(public string $name, protected string $nick = null) {}
}

// 注意:使用字符串null是可以的
public function __construct(public string $name, protected string $nick = 'null') {}

4)不能使用 ...可变参数

// 错误
class Test {
    public function __construct(public string ...$name) {}
} 

我是温新

每天进步一点,就一点点

请登录后再评论