Site logo
Authors
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
Published on
Published on

Tìm hiểu Autoload trong PHP

Tự động tải (Autoload) trong PHP là một cơ chế giúp tự động nạp các lớp khi chúng được sử dụng mà không cần phải include hoặc require thủ công từng tệp. Điều này giúp mã nguồn của bạn trở nên gọn gàng và dễ quản lý hơn, đặc biệt là trong các dự án lớn.

Khái niệm cơ bản về Autoload

Autoload với spl_autoload_register()

Hàm spl_autoload_register() được sử dụng để đăng ký một hoặc nhiều hàm tự động tải. Khi một lớp được sử dụng mà chưa được nạp, PHP sẽ gọi các hàm tự động tải đã đăng ký để nạp lớp đó.

Cú pháp

spl_autoload_register(function ($class_name) {
    include $class_name . '.php';
});

Ví dụ

Giả sử bạn có cấu trúc thư mục sau:

/app
    /models
        User.php
    /controllers
        UserController.php
/public
    index.php

File: /app/models/User.php

// filepath: app/models/User.php
class User {
    public function getName() {
        return "John Doe";
    }
}

File: /app/controllers/UserController.php

// filepath: app/controllers/UserController.php
class UserController {
    public function show() {
        $user = new User();
        echo $user->getName();
    }
}

File: /public/index.php

// filepath: public/index.php
spl_autoload_register(function ($class_name) {
    $file = '../app/' . str_replace('\\', '/', $class_name) . '.php';
    if (file_exists($file)) {
        include $file;
    }
});

$controller = new UserController();
$controller->show(); // Output: John Doe

Sử dụng Autoload với Composer

Composer là một công cụ quản lý gói phổ biến cho PHP, cung cấp một cơ chế tự động tải mạnh mẽ. Bạn có thể sử dụng Composer để tự động tải các lớp trong dự án của mình.

Bước 1: Tạo tệp composer.json

Tạo tệp composer.json trong thư mục gốc của dự án và định nghĩa các quy tắc tự động tải.

File: /composer.json

{
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }
}

Bước 2: Chạy lệnh Composer

Chạy lệnh composer dump-autoload để tạo tệp tự động tải.

composer dump-autoload

Bước 3: Sử dụng Autoload của Composer

Bao gồm tệp vendor/autoload.php do Composer tạo ra trong tệp chính của dự án.

File: /public/index.php

// filepath: public/index.php
require '../vendor/autoload.php';

$controller = new App\Controllers\UserController();
$controller->show(); // Output: John Doe

Kết luận

Tự động tải trong PHP là một công cụ mạnh mẽ giúp bạn quản lý mã nguồn một cách hiệu quả và gọn gàng hơn. Bằng cách sử dụng spl_autoload_register() hoặc cơ chế tự động tải của Composer, bạn có thể tự động nạp các lớp khi chúng được sử dụng mà không cần phải include hoặc require thủ công từng tệp.