Hướng dẫn reflectionobject php - đối tượng phản chiếu php
Reflection là gì?Ngắn gọn nhất thì có thể nói Reflection cung cấp khả năng phân tích cấu trúc bên trong một class bao gồm các: method, property, const, comment và thay đổi (modify) chúng. Show Nó dùng để làm gì?Thật ra là mình cũng ít (không) khi nào dùng đến cái này lắm, nhưng qua tìm hiểu thì thấy nó khá là hữu ích, có thể thay đổi cách làm 1 số chuyện của mình. Ví dụ đọc code của ai đó mà không biết cái biến này là gì, 1 object hay 1 số, 1 string thì có thể dùng hàm cơ bản của PHP là 8 và 9.Tiếp theo là chúng ta có thể sử dụng Reflection để tạo tài liệu bằng cách get comment của 1 class nào đó, rồi kiểm tra từng method, constructor và class đó để xác định những gì diễn ra đối với đầu vào và đầu ra. Các hàm Reflection thông dụngVí dụ ta dùng 8 và 1:
8 trả về 1 string tên của class và 9 trả về 1 mảng tên các method trong object đó.Một hàm khác cũng hay dùng đấy là 4:
Nhìn cũng đủ hiểu chức năng của cái hàm này là gì rồi đúng không? PHP Reflection ClassĐể dễ hiểu hơn ta có 1 số class như sau:
Get class nameGet full name
Get name
Get namespace
Get parent classChúng ta có 1 instance ReflectionClass mới của class cha của User
Get interfaces
Hoặc get 1 mảng các ReflectionClass instances của các interfaces
Get class methods
Get constructor 0Chúng ta có thể xem đầu vào của hàm khởi tạo này 1Cái 5 này cũng là 1 mảng các instance 6, chúng ta lại có thể dùng được: 2getDocCommentNhư đã nói ở trên, chúng ta có thể get comment của 1 class. Ví dụ ta có 1 class như này: 3và kết quả là như thế này 4Làm gì với RefectionGiả sử ta có các class sau 5Khởi tạo 1 book thì có thể 7 là 1 string hoặc là 1 instance của 8 6Sửa class Book 7Nhìn qua ta thấy ngay là chạy 9 sẽ bị lỗi và 0 cho ta kết quả là "Nam Cao". Vào thời điểm runtime $book2, PHP sẽ kiểm tra $author truyền vào cho constructor và tự hiểu $author là 1 instance của class Author và có 1 method là getName(). Đó chính là Refection mà PHP đã dùng để biết được kiểu của biến truyền vào.Mấy ngôn ngữ mà làm được việc trên gọi là 1, là ngôn ngữ có thể tự hiểu được object tại thời điểm runtime, không cần tại compile time. PHP, Ruby, Python là 1. Ngược lại C hay Java là 3.Kết luận
|