Trình tự động nạp của Composer
Thuộc phần Lập trình hướng đối tượng trong hành trình PHP của Coddy. Bài học 13 trên 91.
Tự viết hàm nạp tự động của riêng bạn vẫn được, nhưng các dự án PHP thực tế dùng Composer để tự động xử lý việc nạp tự động. Composer đọc cấu hình dự án của bạn và tạo một hàm nạp tự động được tối ưu, tuân theo tiêu chuẩn PSR-4.
Cấu hình nằm trong tệp composer.json ở thư mục gốc của dự án. Sau đây là cách bạn định nghĩa các quy tắc tự động nạp:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}Điều này cho Composer biết rằng mọi lớp bắt đầu bằng App\ đều cần được tải từ thư mục src/. Sau khi thiết lập xong, Composer tạo các tệp autoloader trong thư mục vendor/.
Để sử dụng trình nạp tự động của Composer, bạn chỉ cần một dòng ở đầu tệp đầu vào:
<?php
require 'vendor/autoload.php';
use App\Models\User;
use App\Services\Logger;
$user = new User("Alice");
$logger = new Logger();
Một câu lệnh require duy nhất đó xử lý việc tải tất cả các lớp trong toàn bộ dự án của bạn. Bạn có thể định nghĩa nhiều ánh xạ không gian tên nếu cần:
{
"autoload": {
"psr-4": {
"App\\": "src/",
"Tests\\": "tests/"
}
}
}Ý chính: Trình tải tự động của Composer loại bỏ việc thêm tệp thủ công và đảm bảo các lớp được tải nhất quán trong toàn bộ dự án. Đây là cách tiếp cận tiêu chuẩn được hầu hết các ứng dụng và framework PHP hiện đại sử dụng.
Thử thách
DễHãy xây dựng một ứng dụng nhỏ dùng cách tự động tải của Composer để tổ chức các lớp trong nhiều tệp. Bạn sẽ mô phỏng cách một dự án PHP thực tế sắp xếp code bằng namespace PSR-4 và trình tự động tải trung tâm.
Bạn sẽ tạo bốn tệp phối hợp với nhau:
src/Models/Product.php: Định nghĩa lớpProducttrong namespaceApp\Models. Lớp này cần có các thuộc tínhpublic $namevàpublic $price, một hàm khởi tạo nhận và gán cả hai giá trị, cùng phương thứcgetInfo()trả về"[name]: $[price]".src/Models/Customer.php: Định nghĩa lớpCustomertrong namespaceApp\Models. Lớp này cần có thuộc tínhpublic $name, một hàm khởi tạo nhận và gán tên, cùng phương thứcgreet()trả về"Welcome, [name]!".vendor/autoload.php: Tạo một trình tự động tải đơn giản bằngspl_autoload_registerđể mô phỏng cách Composer hoạt động. Trình này cần ánh xạ tiền tố namespaceApp\đến thư mụcsrc/, chuyển dấu phân cách namespace thành dấu phân cách thư mục và thêm.phpđể tải đúng tệp.index.php: Đây là tệp điểm vào của bạn. Dùng một câu lệnh để require trình tự động tải từvendor/autoload.php, sau đó dùng từ khóauseđể nhập cảApp\Models\ProductvàApp\Models\Customer. Tạo mộtProductcó tên"Laptop"và giá999, cùng mộtCustomercó tên"Alice". In kết quả gọigreet()trên khách hàng vàgetInfo()trên sản phẩm, mỗi kết quả trên một dòng riêng.
Ý chính ở đây là index.php chỉ cần một câu lệnh require để tải trình tự động tải. Sau đó, tất cả các lớp sẽ tự động được tải khi bạn sử dụng chúng. Đây chính là cách các framework và ứng dụng PHP hiện đại hoạt động với Composer.
Tự làm thử
<?php
// TODO: Nạp autoloader từ vendor/autoload.php
// TODO: Dùng từ khóa 'use' để nhập App\Models\Product
// TODO: Dùng từ khóa 'use' để nhập App\Models\Customer
// TODO: Tạo một Product có tên "Laptop" và giá 999
// TODO: Tạo một Customer có tên "Alice"
// TODO: In ra kết quả của greet() ở Customer
// TODO: In ra kết quả của getInfo() ở Product
?>Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa $thisPhương thứcThuộc tínhHàm khởi tạo (__construct)Hàm hủy (__destruct)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnTừ khóa parent::Ghi đè phương thứcTừ khóa finalLớp trừu tượngÔn tập: hệ thống phân cấp nhân viên7Đóng gói
Công khai, được bảo vệ, riêng tưTìm hiểu sâu về bộ điều chỉnh quyền truy cậpGetter và setterẨn thông tinRút gọn hàm khởi tạo (8.0)Ôn tập: hệ thống hồ sơ học sinh2Không gian tên và tự động nạp
Giới thiệu về không gian tênTừ khóa useChuẩn tự động nạp PSR-4Trình tự động nạp của ComposerÔn tập: dự án có tổ chức5Giao diện và hợp đồng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnGiao diện và lớp trừu tượngGợi ý kiểu với giao diệnÔn tập: Máy tính hình học8Phương thức ma thuật
Giới thiệu về phương thức ma thuật__toString và __debugInfo__get, __set, __isset, __unset__call và __callStatic__clone và sao chép đối tượng__serialize và __unserializeÔn tập: Bộ sưu tập tùy chỉnh3Thuộc tính của lớp
Thuộc tính instance và staticHằng số trong lớpPhương thức và thuộc tính staticThuộc tính private và protectedThuộc tính chỉ đọc (PHP 8.1)Ôn tập: Trình quản lý tài khoản ngân hàng6Đa hình
Xem lại việc ghi đè phương thứcĐa hình qua giao diệnGợi ý kiểu và kiểu hợpLiên kết tĩnh muộnÔn tập: bộ xử lý thanh toánTự luyện tập: Trình biên dịch PHP online