Menu
CoddyTech

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.

challenge icon

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ớp Product trong namespace App\Models. Lớp này cần có các thuộc tính public $name và public $price, một hàm khởi tạo nhận và gán cả hai giá trị, cùng phương thức getInfo() trả về "[name]: $[price]".
  • src/Models/Customer.php: Định nghĩa lớp Customer trong namespace App\Models. Lớp này cần có thuộc tính public $name, một hàm khởi tạo nhận và gán tên, cùng phương thức greet() trả về "Welcome, [name]!".
  • vendor/autoload.php: Tạo một trình tự động tải đơn giản bằng spl_autoload_register để mô phỏng cách Composer hoạt động. Trình này cần ánh xạ tiền tố namespace App\ đến thư mục src/, 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óa use để nhập cả App\Models\Product và App\Models\Customer. Tạo một Product có tên "Laptop" và giá 999, cùng một Customer có tên "Alice". In kết quả gọi greet() 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
?>
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch PHP online