构造函数
语法
__construct(mixed ...$values = ""): void
- mixed是类型别名,也可以理解为联合类型,表示支持所有的类型
- …是可变参数列表, 会转换成指定变量的一个数组,用法如下:
function sum(...$numbers){
$acc = 0;
foreach($numbers as $n){
$acc += $n;
}
return $acc;
}
echo sum(1,2,3,4);
几个注意的地方
- 一个类中只能定义一个方法作为构造函数,如果需要使用不同的输入实现不同方法的构造函数,推荐使用 static 方法包装构造。
- 自 PHP 5.3.3 起,在命名空间中,与类名同名的方法不再作为构造函数。不使用命名空间中的类则不受影响。 构造函数是一个普通的方法,在对应对象实例化时自动被调用。 因此可以定义任何数量的参数,可以是必选、可以有类型、可以有默认值。 构造器的参数放在类名后的括号里调用
<?php
class Point {
protected int $x;
protected int $y;
public function __construct(int $x, int $y = 0) {
$this->x = $x;
$this->y = $y;
}
}
// 两个参数都传入
$p1 = new Point(4, 5);
// 仅传入必填的参数。 $y 会默认取值 0。
$p2 = new Point(4);
// 使用命名参数(PHP 8.0 起):
$p3 = new Point(y: 5, x: 4);
?>
- 如果类没有构造函数,或者构造函数的参数不是必填项时,括号就可以省略,可以使用使用
new 类名
来创建对象
析构函数
__destruct(): void
和c++类似,析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时(直接赋值为null)执行