Hướng dẫn dùng magical source trong PHP

Trong bài này mình sẽ giới thiệu với mọi người về magic methods trong PHP là gì và các magic methods hay dùng trong PHP.

Nội dung chính Show

  • 1, Magic methods là gì.
  • 2, Ưu nhược điểm của magic methods.
  • Ưu điểm
  • Nhược điểm
  • 3, Các magic method trong PHP.
  • 3, Lời kết.
  • Magic Methods Trong PHP
  • 1. Magic methods là gì.
  • 2. Ưu nhược điểm của magic methods.
  • 3, Các magic method trong PHP.
  • +__construct():
  • + __destruct():
  • + __isset():
  • + __unset():
  • + __call():
  • + __callstatic():
  • + __toString():
  • + __invoke():
  • + __Sleep():
  • + __wakeup:
  • + __set_state():
  • + __clone():
  • + __debugInfo():
  • 4. kết luận.
  • 5. Tài liệu tham khảo.

1, Magic methods là gì.

-Magic methods là các phương thức đặc biệt được tạo ra nhằm giải quyết các vấn đề về sự kiện trong chương trình (cụ thể là với class), và đối với PHP cũng thế.

-Từ đầu series đến giờ thực ra các bạn cũng đã được giới thiệu qua về magic methods rồi, phương thức khởi tạo và phương thức hủy trong bài số 6 chính là magic methods.

2, Ưu nhược điểm của magic methods.

-Bất kì một cái gì đó đều có ưu và nhược điểm cả (không có gì là hoàn hảo).

Ưu điểm

-Từ khái niệm trên thì các bạn chắc cũng có thể nhận ra các ưu điểm của nó rồi chứ? nó gồm có các ưu điểm như sau:

  • Giúp cho chúng ta tùy biến được các hành vi.
  • Nó giúp cho chúng ta có thể khởi tạo một đối tượng theo cách mình muốn.

Nhược điểm

  • Một magic methods có tốc độ chậm hơn các phương thức bình thường.

3, Các magic method trong PHP.

-Trong PHP có hỗ trợ chúng ta 15 magic method với từng chức năng khác nhau:

+ __construct(): gọi khi khởi tạo đối tượng.

+ __destruct(): goij khi hủy đối tượng.

+ __set(): gọi khi ta truyền dữ liệu cho một thuộc tính không được phép truy cập.

+ __get(): khi đọc dữ liệu từ một thuộc tính không được phép truy cập.

+ __isset(): được gọi khi gọi hàm isset() hoặc empty() trên một thuộc tính không được phép truy cập.

+ __unset(): được gọi khi hàm unset() được sử dụng trong một thuộc tính không được phép truy cập.

+ __call():được gọi khi ta gọi một phương thức không được phép truy cập trong phạm vi của một đối tượng.

+ __callstatic(): được kích hoạt khi ta gọi một phương thức không được phép truy cập trong phạm vi của một phương thức tĩnh.

+ __toString(): phương thức này giúp class chỉ định xem sẽ in ra cái gì khi nó được dùng.

+ __invoke():phương thức này được gọi khi một lệnh cố gắng gọi một đối tượng như một hàm.

+ __sleep(): được gọi khi serialize() một đối tượng.

+ __wakeup: được gọi khi unserialize() đối tượng.

+ __set_state():

+ __clone(): được sử dụng khi chúng ta clone một object.

+ __debugInfo(): được gọi khi chúng ta sử dụng hàm vardump().

- Hiện tại thì trên blog của mình đã có đầy đủ các bài hướng dẫn về từng magic methods, các bạn có thể tham khảo thêm ở đây.

3, Lời kết.

-Qua bài này mình đã nêu ra được khai niệm của magic methods và danh sách các magic methods trong PHP rồi, nhưng hiện tại thì mình chưa có bài viết nào hướng dẫn cụ thể về cách sử dụng của từng hàm( sẽ viết sau) nên các bạn chịu khó đọc tài liệu tiếng anh nhé.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Bài Viết Mới

Magic Methods Trong PHP

1. Magic methods là gì.

Magic methods là các phương thức đặc biệt để tùy biến các các sự kiện trong php. Hiểu đơn giản là nó cung cấp thêm cách để giải quyết một vấn đề. Magic methods được dùng để xử lý các đối tượng trong lập trình hướng đối tượng.

2. Ưu nhược điểm của magic methods.

Bất kì một cái gì đó đều có ưu và nhược điểm cả (không có gì là hoàn hảo).
Ưu điểm
Từ khái niệm ở trên chúng ta có thể thấy được ưu điểm của magic methods :
• Giúp cho chúng ta tùy biến được các hành vi, thêm cách lựa chọn để xử lý một đối tượng trong php.
• Nó giúp cho chúng ta có thể thao tác với một đối tượng theo cách mình muốn.
Nhược điểm
Từ khái niệm ở trên chúng ta có thể thấy được ưu điểm của magic methods :
• Giúp cho chúng ta tùy biến được các hành vi, thêm cách lựa chọn để xử lý một đối tượng trong php.
• Nó giúp cho chúng ta có thể thao tác với một đối tượng theo cách mình muốn.
• Một magic methods có tốc độ chậm hơn các phương thức bình thường.

3, Các magic method trong PHP.

Tất cả các hàm magic methods được viết trong 1 class cụ thể mà khi ta thao tác với đối tượng của class đó mà tùy trường hợp các hàm magic methods ta đã khai báo trong class đó sẽ được thực hiện.
-Trong PHP hiện nay có 15 hàm magic methods :

+__construct():

Hàm được gọi khi ta khởi tạo một đối tượng.
Trong php thì magic method __construct() rất là phổ biến mà chúng ta hay thường gặp nhất. Hàm __construct() sẽ tự đông được gọi khi ta khởi tạo 1 đối tượng( còn được gọi là hàm khởi tạo).

Không giống như các ngôn ngữ lập trình hướng đối tượng như java hay C#. Trong PHP, hàm khởi tạo không cho phép chúng ta thực hiện việc overload, nó chỉ cho phép khởi tạo 1 đối tượng duy nhất ứng với method __contructs() được khai báo trong class(không khai báo mặc định là không truyền gì).
Ví dụ :

Hướng dẫn dùng magical source trong PHP

Chúng ta thấy nó không thể khải tạo được biến thứ 2 do method __contruct() ta có tham số truyền vào.

Để khắc phục việc không cho overload, trong php có tùy biến như sau :

+ __destruct():

được gọi khi một đối tượng bị hủy. Mặc định khi kết thúc chương trình hoặc khi ta khai báo mới đối tượng đó sẽ bị hủy bỏ và gọi đến method __destruct().

Như trên ví dụ ta có thể thấy đối tượng tạo trước sẽ bị hủy sau khi chương trình kết thúc.

+ __set():

gọi khi ta truyền dữ liệu vào thuộc tính không tồn tại hoặc thuộc tính private trong đối tượng.

Nó truyền dưới dạng key => value. Như ở ví dụ trên, ta set giá trị cho thuộc tính name mà không tồn tại trong class. Nó sẽ gọi đến hàm __set() với $key là thuộc tính đã gọi, $value là giá trị đã gán.
Kết quả:

+ __get():

gọi khi ta truy cập vào thuộc tính không tồn tại hoặc thuộc tính private trong đối tượng. Tương tự như set, get là việc xử lý khi truy cập đối tượng.

+ __isset():

-Phương thức __isset() sẽ được gọi khi chúng ta thực hiện kiểm tra một thuộc tính không được phép truy cập của một đối tượng, hay kiểm tra một thuộc tính không tồn tại trong đối tượng đó. Cụ thể là hàm isset() và hàm empty(). -Chú ý: phương thức __isset() không sử dụng được với thuộc tính tĩnh.

+ __unset():

được gọi khi hàm unset() được sử dụng trong một thuộc tính không được phép truy cập. Tương tự như hàm isset. Khi ta Unset 1 thuộc tính không tồn tại thì method __unset() sẽ được gọi.

+ __call():

được gọi khi ta gọi một phương thức không được phép truy cập trong phạm vi của một đối tượng. Như vậy thì có thể thấy __get() và __call() cũng gần giống nhau. Có điều __get() gọi khi không có thuộc tính còn __call() khi phương thức không có.
Ta cũng có thể dùng hàm __call() để thực hiện overload trong php.
Khai báo : __call($method_name, $parameter)
Trong đó:

   $method_name là phương thức được gọi mà không tồn tại.
    $parameter: là tham số truyền vào( là mảng).

Chúng ta có thể thấy trong class test không hề có hàm overloadFunction. Khi ta gọi tới phương thức overloadFunction thì nó sẽ chạy hàm __call().

+ __callstatic():

Được kích hoạt khi ta gọi một phương thức không được phép truy cập trong phạm vi của một phương thức tĩnh.

Kết quả:

+ __toString():

Phương thức này được gọi khi chúng ta in echo đối tượng. Method __toString() sẽ bắt buộc phải trả về 1 dãy String.

+ __invoke():

Phương thức này được gọi khi ta cố gắng gọi một đối tượng như một hàm.

+ __Sleep():

Được gọi khi serialize() một đối tượng. Thông thường khi chúng ta serialize() một đối tượng thì nó sẽ trả về tất cả các thuộc tính trong đối tượng đó. Nhưng nếu sử dụng __sleep() thì chúng ta có thể quy định được các thuộc tính có thể trả về.

+ __wakeup:

Được gọi khi unserialize() đối tượng.

+ __set_state():

Được sử dụng khi chúng ta var_export một object.

+ __clone():

Được sử dụng khi chúng ta clone(sao chép 1 đối tượng thành 1 đối tượng hoàn toàn mới không liên quan đến đối tượng cũ) một object.

+ __debugInfo():

Được gọi khi chúng ta sử dụng hàm vardump().

4. kết luận.

Trên là tổng quan về magic methods và cách sử dụng chúng. Việc sử dụng magic methods khá là hữu ích nhưng chúng ta cũng không lên lạm dụng vì nó chậm hơn methods thường.

5. Tài liệu tham khảo.

https://toidicode.com/magic-methods-trong-php-106.html
http://php.net/manual/en/