Lập trình PHP nâng cao Lập trình web

Lập trình hướng đối tượng – Phần 07 Một số phương thức khác

Trong bài viết Lập trình hướng đối tượng – Phần 07 Một số phương thức khác chúng ta tiếp tục tìm hiểu một số phương thức khá mạnh trong lập trình hướng đối tượng. Các phương thức Aki sẽ trình bày bao gồm:

  • Phương thức clone()
  • Phương thức __autoload()
  • Phương thức __sleep() & __wakeup()
  • Phương thức __toString()
  • Phương thức __set & __get()

1/ Phương thức clone()

Phương thức clone() giúp chúng ta sao chép một đối tượng từ một đối tượng khác đã tồn tại trước đó.

Nếu chúng ta sử dụng toán tử gán = thì 2 đối tượng sẽ sử dụng cùng chung một vùng nhớ, nghĩa rằng khi thay đổi trên đối tượng này nó sẽ ảnh hưởng đến đối tượng khác. Còn khi sử dụng phương thức clone nó sẽ sao chép và tạo ra các đối tượng độc lập với nhau

2/ Phương thức __autoload()

Phương thức __autoload() giúp chúng ta tự động nạp các lớp từ một đường dẫn chứa các lớp được truyền vào thay vì phải sử dụng các câu lệnh require

Ngay khi class Cat và class Lion được gọi thì phương thức __autoload sẽ được tự động gọi cho chúng ta, phương thức này nhận vào 1 tham số $className chính là tên của các class được gọi (Cat hoặc Lion)

Và nội dung của phương thức này chỉ đơn giản kéo vào các tập tin chứa các class đó mà thôi. Với cách thực hiện này thì chúng ta không cần phải gọi hàm require quá nhiều lần!

3/ Phương thức __sleep() & __wakeup()

Cat.class.php

Phương thức __sleep() được thực hiện khi chúng ta đưa một đối tượng vào hàm serialize. Lúc này ở phương thức __sleep() chúng ta sẽ khai báo những thành phần nào của đối tượng được chuyển thành một chuỗi đặc biệt

Khi hàm serialize được gọi thì phương thức __sleep cũng được gọi tự động, và nó cho hàm serialize biết rằng đối với đối tượng catA chỉ có 2 thuộc tính name và age được chuyển thành chuỗi đặt biệt mà thôi.

Phương thức __wakeup() dùng để làm sạch đối tượng như khi mới khởi tạo ban đầu với các giá trị mặc định được gán vào. Điều này giúp chúng ta không phải khởi tạo đối tượng một lần nữa

Khi hàm unserialize được gọi thì phương thức __wakeup cũng được gọi tự động, và nó tiến hành thiết lập giá trị cho các thuộc tính khi gọi hàm unserialize

4/ Phương thức __toString()

Phương thức __toString() giúp chuyển đối tượng thành chuỗi

Khi thực hiện đoạn mã nguồn này chúng ta sẽ nhận được một thông báo lỗi, bởi vì $catA là một đối tượng và chúng ta không thể sử dụng hàm echo đối với đối tượng được.

Trong trường hợp này chúng ta sẽ khắc phục bằng cách định nghĩa thêm phương thức __toString trong class Cat như sau:

Lúc này khi sử dụng echo đối với đối tượng $catA thì phương thức __toString sẽ thực thi và in ra thông tin name, color, age, weight cho chúng ta.

5/ Phương thức __set & __get()

Khi thực hiện đoạn mã nguồn trên thì chúng ta sẽ lập tức nhận được thông báo lỗi, bởi vì 2 thuộc tính name và age đều nằm ở trạng thái private và do đó nó chỉ có thể truy cập ở bên trong lớp đó mà thôi. Bây giờ chúng ta sẽ tìm hiểu 2 phương thức sau:

  • Phương thức __set() thiết lập các thuộc tính cho đối tượng cho dù thuộc tính đó chưa được khai báo trong class
  • Phương thức __get() lấy giá trị của một thuộc tính nào đó trong class cho dù thuộc tính đó được gán khóa private hoặc protected

Sau đó nội dung của class Cat sẽ được bổ sung thêm 2 phương thức này

Lúc này khi truy cập đến các thuộc tính thì hai phương thức __set và __get sẽ được thực thi, và các thông báo lỗi như ví dụ phía trên sẽ không còn xuất hiện nữa

Kết thúc bài viết Lập trình hướng đối tượng – Phần 07 Một số phương thức khác chúng ta đã tìm hiểu qua khá nhiều phương thức hữu dụng trong lập trình hướng đối tượng. Việc vận dụng tốt các phương thức này trong xây dựng các class sẽ làm cho các class tăng thêm tính chuyên nghiệp, độ mềm dẽo và dễ bảo trì hơn rất nhiều

Series Navigation<< Lập trình hướng đối tượng – Phần 06 Từ khóa static, self, parent và constLập trình hướng đối tượng – Phần 08 Xây dựng class xử lý Phân số >>
Nguồn: laptrinhweb.org