PHP8.0新特性之Constructor property promotion(构造器属性提升)
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) {}
}
我是温新
每天进步一点,就一点点
请登录后再评论