PHP中的构造函数(附代码)

108 阅读1分钟

一种名为__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其他之间有一个特定的类型。