Giới thiệu
Phương thức ma thuật (Magic methods) trong PHP là các phương thức đặc biệt nhằm thực hiện các tác vụ cụ thể. Các phương thức này được đặt tên với tiền tố hai dấu gạch dưới (__). Tất cả tên hàm này được dành riêng và không thể sử dụng cho mục đích khác ngoài chức năng ma thuật liên quan. Phương thức ma thuật trong một lớp phải được khai báo public. Chúng đóng vai trò như các bộ chặn (interceptors) được gọi tự động khi các điều kiện nhất định được đáp ứng.
Dưới đây là danh sách các phương thức ma thuật hiện có trong PHP:
__sleep
public __sleep(): array
Phương thức serialize() trong lớp kiểm tra xem có hàm tên __sleep() không. Nếu có, hàm đó được thực thi trước khi serialize. Nó phải trả về một mảng chứa tên của tất cả biến của đối tượng đó cần được serialize.
__wakeup
public __wakeup(): void
Phương thức unserialize() kiểm tra sự tồn tại của hàm __wakeup(). Nếu có, hàm này có thể tái tạo các tài nguyên mà đối tượng có thể có.
__serialize
public __serialize(): array
serialize() cũng kiểm tra phương thức __serialize(). Nếu có, nó được thực thi trước khi serialize. Phải xây dựng và trả về một mảng liên hợp các cặp khóa/giá trị đại diện cho dạng serialize của đối tượng.
__unserialize
public __unserialize(array $data): void
unserialize() cũng kiểm tra __unserialize(). Nếu có, nó sẽ nhận mảng đã khôi phục từ __serialize(). Sau đó có thể khôi phục các thuộc tính của đối tượng từ mảng đó.
__toString
public __toString(): string
Phương thức __toString() mô tả biểu diễn chuỗi của đối tượng. Ví dụ: echo $obj; sẽ in gì. Phương thức này phải trả về một chuỗi.
__invoke
__invoke([$...]): mixed
Phương thức này được gọi khi script cố gắng gọi một đối tượng như một hàm.
__set_state
static __set_state(array $properties): object
Phương thức tĩnh này được gọi cho các lớp được xuất bởi var_export(). Nó nhận một tham số là mảng chứa các thuộc tính được xuất dưới dạng array('property' => value, ...).
__debugInfo
__debugInfo(): array
Phương thức này được gọi tự động khi var_dump() thực thi để dump một đối tượng, nhằm lấy các thuộc tính nên hiển thị. Nếu không định nghĩa, tất cả thuộc tính public, protected, private sẽ được hiển thị.
Các phương thức nạp chồng thuộc tính
__set
public __set(string $name, mixed $value): void
__set() chạy khi ghi dữ liệu vào thuộc tính không thể truy cập (protected/private) hoặc không tồn tại.
__get
public __get(string $name): mixed
__get() dùng để đọc dữ liệu từ thuộc tính không thể truy cập hoặc không tồn tại.
__isset
public __isset(string $name): bool
__isset() được kích hoạt bởi isset() hoặc empty() trên thuộc tính không thể truy cập hoặc không tồn tại.
__unset
public __unset(string $name): void
__unset() được gọi khi unset() dùng trên thuộc tính không thể truy cập hoặc không tồn tại.