本文目录导读:

在 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语句)
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播