PHP Online

Lập Trình PHP Nâng Cao

Lập Trình Hướng Đối Tượng: Tìm hiểu các phương thức magic

Ở bài trước, chúng ta đã tìm hiểu những kiến thức rất cơ bản về mô hình lập trình hướng đối tượng. Trong bài lần này, chúng ta sẽ tìm hiểu về các phương thức magic. Một trong những yếu tố giúp cho hướng đối tượng trở nên linh hoạt hơn rất nhiều.
 
Phương Thức Magic Trong OOP

Để giúp cho việc sử dụng các object trở nên thuận tiện hơn, PHP đã cung cấp một số phương thức magic, chúng thường được gọi khi có những action nhất định thường xuyên xảy ra trong các object. Điều này cho phép lập trình viên thực thi một số tác vụ hữu ích dễ dàng.

Sử dụng Constructors (hàm dựng) và Destructors (hàm hủy)

Khi một object được khởi tạo, nó thường kèm theo nhu cầu thiết lập một vài thứ ngoài lề. Để xử lý điều này, PHP cung cấp phương thức magic__construct(), phương thức này sẽ tự động được gọi ngay khi một object mới được khởi tạo.

Để minh họa cho khái niệm constructor, chúng ta sẽ thêm một hàm dựng (constructor) vàoMyclasscó nhiệm vụ xuất ra một thông tin bất kỳ (do chúng ta thiết lập) ngay khi có một object thể hiện của class được khởi tạo.
Chú ý—__CLASS__trả về tên của chính class gọi nó; nó được gọi hằng số magic (magic constant). Trong PHP, thì có một vài hằng số magic, để tìm hiểu thêm về chúng bạn tìm đọc trong PHP manual.

Đọc lại file trên trình duyệt, bạn sẽ thấy kết quả như sau:
 
The class "MyClass" was initiated!
I'm a class property!
End of file.
 
Để gọi một hàm khi object bị hủy, chúng ta có sẵn phương thức magic__destruct(). Thông thường nó được sử dụng vào mục đích dọn dẹp một cái gì đó (ví dụ: đóng một kết nối cơ sở dữ liệu).

Để minh họa, chúng ta sẽ xuất ra một đoạn thông tin khi object bị hủy bằng cách sử dụng phương thức__destruct()trong MyClass:
Với một hàm hủy được định nghĩa trong class, bạn reload lại trình duyệt để nhận được kết quả như sau:
 
The class "MyClass" was initiated!
I'm a class property!
End of file.
The class "MyClass" was destroyed.
"Khi kết thúc một file, PHP sẽ tự động giải phóng mọi tài nguyên."

Vì vậy, để hiểu rõ bản chất hàm hủy hơn, chúng ta sẽ hủy object trước khi kết thúc file bằng hàm unset():


Bây giờ kết quả trên trình duyệt sẽ hiển thị như sau:

The class "MyClass" was initiated!
I'm a class property!
The class "MyClass" was destroyed.
End of file.
 
Convert qua một Chuỗi

Nếu bạn muốn echo MyClass ra dưới dạng chuỗi, bạn sẽ gặp lỗi. Để tránh được lỗi này, bạn cần sử dụng một phương thức magic khác được gọi là__toString().

Nếu không có__toString(), mọi cố gắng để echo object ra dưới dạng chuỗi sẽ đều cho ra một kết quả lỗi nghiêm trọng (fatal error). Dưới đây là một ví dụ về việc echo một object ra dưới dạng chuỗi mà không sử dụng một phương thức magic:
 
Kết quả sẽ hiển thị như sau:
 
The class "MyClass" was initiated!

Catchable fatal error: Object of class MyClass could not be converted to string in /Applications/XAMPP/xamppfiles/htdocs/testing/test.php on line 40
 
Để tránh được lỗi này, chúng ta thêm phương thức__toString()vào trong class:
 
Lần này, khi bạn echo object, vì trong MyClass chúng ta đã xây dựng hàm __toString() nên nó sẽ tự động được triệu gọi, và chúng ta thấy kết quả sẽ trả về như sau:
 
The class "MyClass" was initiated!
Using the toString method: I'm a class property!
The class "MyClass" was destroyed.
End of file.
 
Ngoài những phương thức magic chúng ta đã thảo luận ở đây, PHP còn cung cấp sẵn cho chúng ta một số phương thức magic khác. Để tìm hiểu thêm về danh sách các phương thức magic, bạn đọc thêm trong PHP manual.

(Vũ Anh Tuấn)
37313
Bạn vẫn chưa hiểu rõ vấn đề ?. Bạn vẫn còn nhiều điều thắc mắc ?. Bạn gặp lỗi khi thực hành mã lệnh trên ?. Hãy tham gia diễn đàn QHOnline.Info để nhận được sự giúp đỡ từ phía cộng đồng nhanh nhất. Đồng thời tải những tài liệu giá trị tại diễn đàn. Việc đăng ký là hoàn toàn miễn phí, hãy đăng ký ngay để chúng tôi giúp đỡ bạn nhé.

Ghi rõ nguồn từ website QHOnline.Info - Khi bạn phát hành lại thông tin từ website này

Ý kiến cho bài viết này.