一种名为__construct() 的特殊方法被称为构造器:
class Dog {
public function __construct() {
}
}
当你创建一个对象时,这个方法被用来初始化对象的属性,因为它在调用时被自动调用。new Classname()
class Dog {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function bark() {
echo $this->name . ' barked!';
}
}
$roger = new Dog('Roger');
$roger->bark();
这是很常见的事情,以至于PHP(从PHP8开始)包含了一个叫做构造函数促进的东西,它自动地做这件事:
class Dog {
public $name;
public function __construct($name) {
$this->name = $name;
}
//...
通过使用访问修饰符,从构造函数的参数到局部变量的赋值会自动完成:
class Dog {
public function __construct(public $name) {
}
public function bark() {
echo $this->name . ' barked!';
}
}
$roger = new Dog('Roger');
$roger->name; //'Roger'
$roger->bark(); //'Roger barked!'
属性可以是类型化的。
你可以使用public string $name ,要求名称是一个字符串:
class Dog {
public string $name;
public function __construct($name) {
$this->name = $name;
}
public function bark() {
echo $this->name . ' barked!';
}
}
$roger = new Dog('Roger');
$roger->name; //'Roger'
$roger->bark(); //'Roger barked!'
现在在这个例子中一切正常,但试着把它改为public int $name ,要求它是一个整数。
如果你用字符串初始化$name ,PHP将引发一个错误:
TypeError: Dog::__construct():
Argument #1 ($name) must be of type int,
string given on line 14
很有趣,对吗?
我们可以强制要求属性在string,int,float,string,object,array,bool 和其他之间有一个特定的类型。