本文目录导读:

在 PHP 中,__construct 是类的构造函数,它在创建对象时自动执行,具体执行逻辑如下:
基本执行时机
当使用 new 关键字实例化类时,PHP 会自动调用 __construct 方法:
class User {
public function __construct() {
echo "对象正在创建中...";
}
}
$user = new User(); // 输出: 对象正在创建中...
执行顺序
class Test {
// 1. 属性初始化
public $name = '默认值';
// 2. 调用构造函数
public function __construct($value) {
// 3. 构造函数体内的代码
$this->name = $value;
echo "构造函数执行完毕";
}
}
$obj = new Test('新值');
执行顺序:
- 内存分配
- 属性初始化为默认值
- 调用
__construct - 执行构造函数体内代码
参数传递
class Product {
private $name;
private $price;
public function __construct($name, $price = 0) {
$this->name = $name;
$this->price = $price;
}
}
// 传参创建对象
$product = new Product('手机', 2999);
继承场景
父类构造函数
class Parent {
public function __construct() {
echo "父类构造函数";
}
}
class Child extends Parent {
public function __construct() {
// 默认不会自动调用父类构造函数
parent::__construct(); // 需要显式调用
echo "子类构造函数";
}
}
$child = new Child();
// 输出: 父类构造函数子类构造函数
重要特性
自动调用
class AutoCall {
public function __construct() {
$this->init();
}
private function init() {
// 初始化逻辑
}
}
// 创建对象时自动执行
$obj = new AutoCall();
不能有返回值
class NoReturn {
public function __construct() {
// 不能 return 任何值
return; // 语法正确但无意义
// return $this; // 语法错误
}
}
类型声明
class Typed {
public function __construct(
private string $name,
private int $age,
private ?array $data = null
) {
// 构造函数参数自动赋值给属性(PHP 8.0+)
}
}
实际应用场景
class Database {
private $connection;
public function __construct($host, $user, $pass) {
// 自动建立数据库连接
$this->connection = new mysqli($host, $user, $pass);
if ($this->connection->connect_error) {
throw new Exception("连接失败");
}
}
public function query($sql) {
return $this->connection->query($sql);
}
}
// 使用
$db = new Database('localhost', 'root', 'password');
$result = $db->query('SELECT * FROM users');
__construct 的核心逻辑:
- 自动执行:创建对象时自动触发
- 初始化:用于设置对象初始状态
- 接收参数:可通过参数自定义初始化
- 继承处理:子类需手动调用
parent::__construct() - 错误处理:可在构造函数中抛出异常
- 不可返回值:不能返回任何值(除了
return语句)