构造与析构
__construct、__destruct、构造函数参数提升(PHP8)、readonly
构造与析构
__construct 在对象创建时调用,__destruct 在对象销毁时调用。PHP 8 的构造函数属性提升让代码更简洁。
学完本章你将: 掌握 __construct/__destruct、属性提升、readonly。
构造与析构
php
<?php
class FileLogger {
private $fp;
public function __construct(string $path) {
$this->fp = fopen($path, "a");
echo "日志文件已打开\n";
}
public function log(string $msg): void {
fwrite($this->fp, date("[Y-m-d H:i:s] ") . $msg . "\n");
}
public function __destruct() {
if ($this->fp) {
fclose($this->fp);
echo "日志文件已关闭\n";
}
}
}
// 使用
$logger = new FileLogger("app.log");
$logger->log("用户登录");
// 脚本结束时自动调用 __destruct
构造函数属性提升(PHP 8)
php
<?php
// ❌ PHP 7 写法(啰嗦)
class User7 {
private string $name;
private int $age;
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
}
// ✅ PHP 8 写法(简洁)
class User8 {
public function __construct(
private string $name,
private int $age,
) { }
}
readonly 属性(PHP 8.1+)
php
<?php
class DTO {
public function __construct(
public readonly string $id,
public readonly DateTime $createdAt = new DateTime(),
) { }
}
$dto = new DTO("abc123");
// $dto->id = "new"; // ❌ 错误——readonly 不能改