Xin chào mọi người!
Chủ đề hôm nay là “PSR” và “Autoloding” ..
1. PSR là gì?
- PSR viết tắt của “PHP Standard Recommendation” là các tiêu chuẩn viết code trong ngôn ngữ PHP.
- “PSR” có rất nhiều các tiêu chuẩn khác nhau từ PSR-0 đến PSR-19.
- “PSR” giúp code dễ đọc, dễ phát hiện sai sót bởi các thành viên trong nhóm.
- Tiêu chuẩn viết mã trong PHP là rất khác nhau giữa các framework và ngay cả các phiên bản PHP khác nhau.
- Từ tháng 10 năm 2014, tiêu chuẩn PSR-0 không còn được dùng nữa và chuyển sang PSR-4, PSR-1 và PSR-2 là các tiêu chuẩn cơ bản về viết mã nguồn, hiện PSR-2 được coi là tiêu chuẩn phổ biến cho viết code.
2. Autoloading là gì?
- Composer là một công cụ tuyệt vời cho các lập trình viên PHP giúp cho việc quản lý các gói thư viện dễ dàng.
- Composer quản lý sự phụ thuộc giữa các gói thư viện thông qua autoloading.
- Vấn đề: Khi chúng ta viết một ứng dụng cho sử dụng một danh sách dài các thư viện, ở mỗi file code PHP chúng ta phải thực hiện “include” chúng vào những đoạn nào có gọi đến các class này, nếu danh sách này dài hàng vài chục dòng thì quả là vấn đề.
- Giải pháp: include tất cả các class này ở phần đầu mỗi file PHP. Giải pháp tốt hơn: Ở những đâu cần gọi đến các class này, thực hiện tải chúng ở thời điểm đó. Cách thức tải và sử dụng các class như vậy gọi là “autoloading”.
3. Thực Code?
- Tạo Folder cấu trúc như sau:
- Để hiểu rõ cơ chế “autoloading”, Chúng ta có hai Class A và B ở hai file khác nhau A.php và B.php trong folder “Classes”
- Tạo file tên “composer.json” nội dung như sau:
- Trong đây chúng ta sử dụng PSR-4 Audoloading.
- Để “composer” tự động tạo ra file “autoload” thực hiện lệnh “composer dump-autoload” hoặc “composer dump-autoload -o” trong Terminal Ubuntu hoặc CMD với đường dẫn là Folder chính “Autoloading” (Trong Ubuntu sử dụng câu lệnh “sudo apt install composer” để cài tích hợp “composer” vào Terminal)
- Sau khi chạy xong:
- Khi đó mở file vendor/composer/autoload_psr4.php chúng ta thấy composer đã tự động sinh code autoloading
- Để sử dụng autoloader này trong file index.php chúng ta thực hiện include mỗi autoloader này vào:
- Thực hiện chúng ta thấy rằng, ứng dụng chỉ load mỗi class B mà không load class A:
- Ở đây chúng ta thấy ứng dụng load cả các file của composer tuy nhiên khi số lượng class tăng lên hàng trăm, hàng nghìn thì autoloader thật sự mới phát huy tác dụng.
Chúc các bạn thành công!