Autoloading với composer

https://allaravel.com/blog/php-autoloading-la-gi-psr-4-autoloading-voi-composer

Autoloading với composer

Trong phần này chúng ta giả định đã cài đặt composer (Tham khảo bài viết Composer công cụ không thể thiếu cho các dự án PHP). Trong thư mục gốc của web server chúng ta có thể thực hiện lệnh composer xem như thế nào.

Composer làm việc với một file thiết lập có định dạng json là composer.json được thêm vào trong thư mục gốc của dự án. Thực hiện tạo ra bằng lệnh composer init hoặc có thể tạo một file text và đặt tên là composer.json. Trong ví dụ này khá đơn giản không có thiết lập gì nên chúng ta đưa vào nội dung { } là bao của nội dung json. Tiếp đến, thực hiện lệnh composer install, nó sẽ tạo ra thư mục vendor chứa các gói thư viện ngoài mà bạn muốn sử dụng và file autoload.php.

Thay đổi nội dung file composer.json để composer sẽ tự động tạo lại file autoload.php. Có 4 cách autoloading trong composer là:

  • File base autoloading

  • Classmap Based Autoloading

  • PSR-0 Autoloading

  • PSR-4 Autoloading

Trong bài viết này chúng ta sẽ sử dụng PSR-4 Autoloading, thay đổi nội dung composer.json như sau:

{
    "autoload": {
        "psr-4": {
            "Classes\\": "Classes"
        }
    }
}

Để composer tự động tạo ra file autoload thực hiện lệnh composer dump-autoload. Khi đó mở file vendor/composer/autoload_psr4.php chúng ta thấy composer đã tự động sinh code autoloading

<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'Classes\\' => array($baseDir . '/Classes'),
);

Để 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:

<?php

require('vendor/autoload.php');
use App\B;

$b = new B();
var_dump(get_included_files());

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:

array(6) { 
    [0]=> string(35) "C:\Laragon\www\autoloader\index.php" 
    [1]=> string(45) "C:\Laragon\www\autoloader\vendor\autoload.php" 
    [2]=> string(59) "C:\Laragon\www\autoloader\vendor\composer\autoload_real.php" 
    [3]=> string(57) "C:\Laragon\www\autoloader\vendor\composer\ClassLoader.php" 
    [4]=> string(61) "C:\Laragon\www\autoloader\vendor\composer\autoload_static.php" 
    [5]=> string(39) "C:\Laragon\www\autoloader\Classes\B.php" 
}

Ở đâ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.

Last updated