Hàm hủy (__destruct)
Thuộc phần Lập trình hướng đối tượng trong hành trình PHP của Coddy. Bài học 8 trên 91.
Phương thức __destruct là một phương thức đặc biệt, được gọi tự động khi một đối tượng bị hủy. Đối tượng bị hủy khi không còn tham chiếu nào đến nó hoặc khi tập lệnh kết thúc.
Đây là ví dụ về một lớp có cả hàm khởi tạo và hàm hủy:
<?php
class Resource {
public $name;
public function __construct($name) {
$this->name = $name;
echo $this->name . " was created\n";
}
public function __destruct() {
echo $this->name . " was destroyed\n";
}
}Tạo một đối tượng và theo dõi vòng đời của nó:
echo "=== Start ===\n";
$r = new Resource("Connection");
echo "Using " . $r->name . "\n";
unset($r); // hủy đối tượng (object) một cách tường minh
echo "=== End ===\n";Đầu ra:
=== Start ===
Connection was created
Using Connection
Connection was destroyed
=== End ===Hàm unset() xóa tham chiếu đến đối tượng, khiến hàm hủy chạy ngay lập tức.
Nếu bạn không gọi unset(), hàm hủy sẽ tự động chạy khi tập lệnh kết thúc:
$r = new Resource("Logger");
echo "Working...\n";
// __destruct tự động được gọi khi tập lệnh kết thúcĐầu ra:
Logger was created
Working...
Logger was destroyedĐiểm chính: Phương thức __destruct hữu ích cho các công việc dọn dẹp như đóng tệp, giải phóng tài nguyên hoặc ghi nhật ký khi không còn cần đến một đối tượng.
Thử thách
Trung bìnhHoàn thiện lớp Resource trong resource.php:
- Thêm phương thức
__constructnhận$name, đặt giá trị này làm thuộc tính và in ra"[name] was created" - Thêm phương thức
logMessagenhận$messagevà in ra"Log: [message]" - Thêm phương thức
__destructin ra"[name] was destroyed"
Tệp driver.php sẽ kiểm tra vòng đời của các đối tượng Resource.
Tự làm thử
<?php
require_once 'resource.php';
$testCase = trim(fgets(STDIN));
if ($testCase == "basic_test") {
echo "=== Start ===\n";
$r = new Resource("FileHandler");
echo "Using " . $r->name . "\n";
unset($r);
echo "=== End ===\n";
} elseif ($testCase == "auto_destruct_test") {
$r = new Resource("Logger");
$r->logMessage("Application started");
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa $thisPhương thứcThuộc tínhHàm khởi tạo (__construct)Hàm hủy (__destruct)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnTừ khóa parent::Ghi đè phương thứcTừ khóa finalLớp trừu tượngÔn tập: hệ thống phân cấp nhân viên7Đóng gói
Công khai, được bảo vệ, riêng tưTìm hiểu sâu về bộ điều chỉnh quyền truy cậpGetter và setterẨn thông tinRút gọn hàm khởi tạo (8.0)Ôn tập: hệ thống hồ sơ học sinh2Không gian tên và tự động nạp
Giới thiệu về không gian tênTừ khóa useChuẩn tự động nạp PSR-4Trình tự động nạp của ComposerÔn tập: dự án có tổ chức5Giao diện và hợp đồng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnGiao diện và lớp trừu tượngGợi ý kiểu với giao diệnÔn tập: Máy tính hình học8Phương thức ma thuật
Giới thiệu về phương thức ma thuật__toString và __debugInfo__get, __set, __isset, __unset__call và __callStatic__clone và sao chép đối tượng__serialize và __unserializeÔn tập: Bộ sưu tập tùy chỉnh3Thuộc tính của lớp
Thuộc tính instance và staticHằng số trong lớpPhương thức và thuộc tính staticThuộc tính private và protectedThuộc tính chỉ đọc (PHP 8.1)Ôn tập: Trình quản lý tài khoản ngân hàng6Đa hình
Xem lại việc ghi đè phương thứcĐa hình qua giao diệnGợi ý kiểu và kiểu hợpLiên kết tĩnh muộnÔn tập: bộ xử lý thanh toánTự luyện tập: Trình biên dịch PHP online