Hướng dẫn how to create autoload php using composer - cách tạo php autoload bằng composer

Trong bài viết này, chúng tôi sẽ thảo luận về những điều cơ bản của tự động tải trong PHP và cách tự động tải các lớp PHP với nhà soạn nhạc. Tôi sẽ giải thích lý do tại sao tự động tải rất quan trọng và chỉ cho bạn cách sử dụng trình soạn thảo cho tự động tải từng bước. Tôi cũng sẽ giải thích sự khác biệt giữa các loại tự động tải khác nhau trong nhà soạn nhạc.

Tại sao chúng ta cần tự động tải?

Khi bạn xây dựng các ứng dụng PHP, bạn có thể cần sử dụng các thư viện của bên thứ ba. Và như bạn đã biết, nếu bạn muốn sử dụng các thư viện này trong ứng dụng của mình, bạn cần đưa chúng vào các tệp nguồn của mình bằng cách sử dụng các câu lệnh require hoặc include. & NBSP;

Các tuyên bố này & nbsp; ____ 8 hoặc include là tốt miễn là bạn đang phát triển các ứng dụng nhỏ. Nhưng khi ứng dụng của bạn phát triển, danh sách các câu lệnh require hoặc include ngày càng dài hơn, điều này hơi khó chịu và khó duy trì. Vấn đề khác với phương pháp này là bạn đang tải toàn bộ thư viện trong ứng dụng của mình, bao gồm cả các phần bạn thậm chí không sử dụng. Điều này dẫn đến dấu chân bộ nhớ nặng hơn cho ứng dụng của bạn.

Để khắc phục vấn đề này, sẽ là lý tưởng để tải các lớp chỉ khi chúng thực sự cần thiết. Đó là nơi tự động tải đến. Về cơ bản, khi bạn sử dụng một lớp trong ứng dụng của mình, trình tải tự động có kiểm tra xem nó đã được tải và nếu không, trình tải tự động tải lớp cần thiết vào bộ nhớ. Vì vậy, lớp học được tải trên con ruồi nơi mà nó cần, điều này được gọi là tự động tải. Khi bạn sử dụng tự động tải, bạn không cần phải bao gồm tất cả các tệp thư viện theo cách thủ công; Bạn chỉ cần bao gồm tệp autoloader chứa logic tự động tải và các lớp cần thiết sẽ được bao gồm một cách linh hoạt.

Sau đó trong bài viết này, chúng tôi sẽ xem xét tự động tải với nhà soạn nhạc. Nhưng trước tiên, tôi sẽ giải thích làm thế nào bạn có thể thực hiện tự động tải trong PHP mà không cần nhà soạn nhạc.

Cách tải tự động hoạt động mà không có nhà soạn nhạc

Bạn có thể không nhận ra điều đó, nhưng có thể thực hiện tự động tải trong PHP mà không cần nhà soạn nhạc. Hàm & nbsp; ____ 14 là những gì làm cho điều này có thể. Hàm

{
    "autoload": {
        "files": ["lib/Foo.php", "lib/Bar.php"]
    }
}
4 cho phép bạn đăng ký các chức năng sẽ được đưa vào hàng đợi để được kích hoạt tuần tự khi PHP cố gắng tải các lớp chưa được tải.

Hãy để nhanh chóng đi qua ví dụ sau để hiểu cách thức hoạt động của nó.

Trong ví dụ trên, chúng tôi đã đăng ký chức năng

{
    "autoload": {
        "files": ["lib/Foo.php", "lib/Bar.php"]
    }
}
6 làm trình tải tự động tùy chỉnh của chúng tôi bằng cách sử dụng chức năng
{
    "autoload": {
        "files": ["lib/Foo.php", "lib/Bar.php"]
    }
}
4. Tiếp theo, khi bạn cố gắng khởi tạo lớp
{
    "autoload": {
        "files": ["lib/Foo.php", "lib/Bar.php"]
    }
}
8 và chưa có sẵn, PHP sẽ thực thi tất cả các chức năng tự động tải đã đăng ký theo tuần tự. Và do đó, hàm
{
    "autoload": {
        "files": ["lib/Foo.php", "lib/Bar.php"]
    }
}
9 được gọi là, nó bao gồm các tệp lớp cần thiết và cuối cùng đối tượng được khởi tạo. Đối với ví dụ này, chúng tôi giả sử lớp & nbsp; ____ 18 được xác định trong tệp lib/foobar.php.lib/FooBar.php file.

Không tự động tải, bạn sẽ cần sử dụng câu lệnh ____ 8 & nbsp; hoặc include để bao gồm tệp lớp

{
    "autoload": {
        "files": ["lib/Foo.php", "lib/Bar.php"]
    }
}
8. Việc triển khai Autoloader khá đơn giản trong ví dụ trên, nhưng bạn có thể xây dựng trên này bằng cách đăng ký nhiều trình tải tự động cho các loại lớp khác nhau.

Trong thực tế, bạn sẽ không thường xuyên viết trình tải tự động của riêng mình. Đó là những gì nhà soạn nhạc dành cho! Trong phần tiếp theo, chúng tôi sẽ thảo luận về cách sử dụng nhà soạn nhạc để tự động tải trong PHP.

Cách tải tự động hoạt động với nhà soạn nhạc

Đầu tiên, hãy đảm bảo cài đặt trình soạn thảo trên hệ thống của bạn nếu bạn muốn theo dõi cùng với các ví dụ. Khi nói đến tự động tải với nhà soạn nhạc, có những phương pháp khác nhau mà bạn có thể chọn.

Cụ thể, Composer cung cấp bốn phương thức khác nhau cho các tệp tự động tải:

  1. Tệp tự động tải
  2. ClassMap tự động tải
  3. PSR-0 tự động tải tự động
  4. PSR-4 tự động tải

Theo tài liệu của nhà soạn nhạc chính thức, PSR-4 là cách tự động tải được khuyến nghị và chúng tôi sẽ trải qua chi tiết đó trong phần tiếp theo. Trong phần này, chúng tôi sẽ thảo luận ngắn gọn về ba tùy chọn khác.

Trước khi chúng tôi tiếp tục, hãy để nhanh chóng thực hiện các bước mà bạn cần thực hiện khi bạn muốn sử dụng tự động tải của nhà soạn nhạc.

  • Xác định tệp Composer.json trong gốc của dự án hoặc thư viện của bạn. Nó nên chứa & nbsp; Chỉ thị dựa trên loại tự động tải.composer.json file in the root of your project or library. It should contain  directives based on the type of autoloading.
  • Chạy lệnh
    4 để tạo các tệp cần thiết mà nhà soạn nhạc sẽ sử dụng để tự động tải.
  • Bao gồm câu lệnh
    5 ở đầu tệp nơi bạn muốn sử dụng tự động tải.

Tự động tải: Chỉ thị 6

Tệp tự động tải hoạt động tương tự như các câu lệnh include hoặc require cho phép bạn tải toàn bộ tệp nguồn. Tất cả các tệp nguồn được tham chiếu với Chỉ thị

6 sẽ được tải mỗi khi ứng dụng của bạn chạy. Điều này rất hữu ích cho việc tải các tệp nguồn không sử dụng các lớp.

Để sử dụng tệp tự động tải, cung cấp danh sách các tệp trong Chỉ thị

6 của tệp Composer.json, như được hiển thị trong đoạn trích sau đây.composer.json file, as shown in the following snippet.

{
    "autoload": {
        "files": ["lib/Foo.php", "lib/Bar.php"]
    }
}

Như bạn có thể thấy, chúng tôi có thể cung cấp một danh sách các tệp trong Chỉ thị

6 mà chúng tôi muốn tự động tải với trình soạn thảo. Sau khi bạn tạo tệp Composer.json trong root dự án của bạn với các nội dung trên, bạn chỉ cần chạy lệnh ____ 24 & nbsp; để tạo các tệp autoloader cần thiết. Chúng sẽ được tạo ra theo thư mục nhà cung cấp. Cuối cùng, bạn cần bao gồm câu lệnh ____ 25 & nbsp; ở đầu tệp nơi bạn muốn tự động tải các tệp với trình soạn thảo, như được hiển thị trong đoạn trích sau.composer.json file in your project root with the
above contents, you just need to run the 
4 command to create the necessary autoloader files. These will be created under the vendor directory. Finally, you need to include the 
5 statement at the top of the file where you want to autoload files with Composer, as shown in the following snippet.

Câu lệnh

5 đảm bảo rằng các tệp cần thiết được tải động. & NBSP;

Tự động tải: Chỉ thị { "autoload": { "classmap": ["lib"] } }5

ClassMap Autoloading là phiên bản cải tiến của tệp tự động tải. & NBSP; bạn chỉ cần cung cấp một danh sách các thư mục và nhà soạn nhạc sẽ quét tất cả các tệp trong các thư mục đó. Đối với mỗi tệp, trình soạn thảo sẽ tạo một danh sách các lớp có trong tệp đó và bất cứ khi nào một trong các lớp đó là cần thiết, nhà soạn nhạc sẽ tự động tải tệp tương ứng.

Hãy để nhanh chóng sửa đổi tệp Composer.json để trình diễn trình tải tự động ClassMap.composer.json file to demonstrate the classmap autoloader.

{
    "autoload": {
        "classmap": ["lib"]
    }
}

Chạy lệnh

4 và nhà soạn nhạc sẽ đọc các tệp trong thư mục LIB để tạo bản đồ các lớp có thể được tự động tải.lib directory to create a map of classes that can be autoloaded.

Tự động tải: PSR-0

PSR-0 là một tiêu chuẩn được đề xuất bởi nhóm php-fig để tự động tải. Trong tiêu chuẩn PSR-0, bạn phải sử dụng các không gian tên để xác định các thư viện của mình. Tên lớp đủ điều kiện phải phản ánh cấu trúc

{
    "autoload": {
        "classmap": ["lib"]
    }
}
7. Ngoài ra, các lớp của bạn phải được lưu trong các tệp theo cùng một cấu trúc thư mục như của các không gian tên.

Hãy cùng xem tệp

{
    "autoload": {
        "classmap": ["lib"]
    }
}
8 sau đây.

{
    "autoload": {
        "psr-0": {
            "Tutsplus\\Library": "src"
        }
    }
}

Trong tự động tải PSR-0, bạn cần ánh xạ các không gian tên tới các thư mục. Trong ví dụ trên, chúng tôi nói với nhà soạn nhạc rằng bất cứ điều gì bắt đầu với không gian tên

{
    "autoload": {
        "classmap": ["lib"]
    }
}
9 nên có sẵn trong thư mục thư viện SRC \ Tutsplus \.src\Tutsplus\Library directory.

Ví dụ: nếu bạn muốn xác định lớp

{
    "autoload": {
        "psr-0": {
            "Tutsplus\\Library": "src"
        }
    }
}
0 trong thư mục thư viện SRC \ Tutsplus \, bạn cần tạo SRC \ Tutsplus \ Thư viện \ foo.php & nbsp; tệp như trong đoạn trích sau:src\Tutsplus\Library directory, you need to create the src\Tutsplus\Library\Foo.php file as shown in the following snippet:

Như bạn có thể thấy, lớp này được xác định trong không gian tên

{
    "autoload": {
        "classmap": ["lib"]
    }
}
9. Ngoài ra, tên tệp tương ứng với tên lớp. Hãy để nhanh chóng xem cách bạn có thể tự động tải lớp
{
    "autoload": {
        "psr-0": {
            "Tutsplus\\Library": "src"
        }
    }
}
0.

Trình soạn thảo sẽ tự động tải lớp

{
    "autoload": {
        "psr-0": {
            "Tutsplus\\Library": "src"
        }
    }
}
0 từ thư mục thư viện SRC \ Tutsplus \.src\Tutsplus\Library directory.

Vì vậy, đó là một lời giải thích ngắn gọn về việc tự động nạp tệp, classmap và psr-0 trong nhà soạn nhạc. Trong phần tiếp theo, chúng tôi sẽ thấy cách tải tự động PSR-4 hoạt động.

Cách tải tự động PSR-4 hoạt động với nhà soạn nhạc

Trong phần trước, chúng tôi đã thảo luận về cách tải tự động PSR-0 hoạt động. PSR-4 tương tự như tự động tải PSR-0 ở chỗ bạn cần sử dụng các không gian tên, nhưng bạn không cần phải bắt chước cấu trúc thư mục với các không gian tên.

Trong tự động tải PSR-0, bạn phải ánh xạ các không gian tên vào cấu trúc thư mục. Như chúng tôi đã thảo luận trong phần trước, nếu bạn muốn tự động tải lớp

{
    "autoload": {
        "psr-0": {
            "Tutsplus\\Library": "src"
        }
    }
}
4, nó phải được đặt tại SRC \ Tutsplus \ Library \ foo.php. Trong tự động tải PSR-4, bạn có thể rút ngắn cấu trúc thư mục, dẫn đến cấu trúc thư mục đơn giản hơn nhiều so với tự động tải PSR-0.src\Tutsplus\Library\Foo.php. In PSR-4 autoloading, you can shorten the directory structure, which results in a much simpler directory structure compared to PSR-0 autoloading.

Chúng tôi sẽ sửa đổi ví dụ trên trên xem nếu bạn có thể phát hiện ra sự khác biệt.

Đây là những gì tệp & nbsp; composer.json trông với tự động tải PSR-4.composer.json file looks with PSR-4 autoloading.

{
    "autoload": {
        "psr-4": {
            "Tutsplus\\Library\\": "src"
        }
    }
}

Điều quan trọng cần lưu ý là chúng tôi đã thêm các dấu gạch chéo ngược ở cuối không gian tên. Ánh xạ trên nói với nhà soạn nhạc rằng bất cứ điều gì bắt đầu với không gian tên

{
    "autoload": {
        "classmap": ["lib"]
    }
}
9 nên có sẵn trong thư mục SRC. Vì vậy, bạn không cần phải tạo ra các thư mục Tutsplus và thư viện. Ví dụ: nếu bạn yêu cầu lớp
{
    "autoload": {
        "psr-0": {
            "Tutsplus\\Library": "src"
        }
    }
}
4, trình soạn thảo sẽ cố gắng tải tệp src \ foo.php.src directory. So you don’t need to create the Tutsplus and Library directories. For example, if you request the
{
    "autoload": {
        "psr-0": {
            "Tutsplus\\Library": "src"
        }
    }
}
4 class, Composer will try to load the src\Foo.php file.

Điều quan trọng là phải hiểu rằng lớp

{
    "autoload": {
        "psr-0": {
            "Tutsplus\\Library": "src"
        }
    }
}
0 vẫn được xác định theo không gian tên
{
    "autoload": {
        "classmap": ["lib"]
    }
}
9; Nó chỉ là bạn không cần phải tạo ra các thư mục bắt chước các không gian tên. Nội dung tệp src \ foo.php sẽ giống hệt với các tệp của & nbsp; src \ tutsplus \ thư viện \ foo.php trong & nbsp; phần trước.src\Foo.php file contents will be identical to those of the src\Tutsplus\Library\Foo.php file in the previous section.

Như bạn có thể thấy, PSR-4 dẫn đến cấu trúc thư mục đơn giản hơn nhiều, vì bạn có thể bỏ qua việc tạo các thư mục lồng nhau trong khi vẫn sử dụng không gian tên đầy đủ.

PSR-4 là cách tự động tải được khuyến nghị và nó được chấp nhận rộng rãi trong cộng đồng PHP. Bạn nên bắt đầu sử dụng nó trong các ứng dụng của bạn nếu bạn đã thực hiện như vậy!

Sự kết luận

Hôm nay, chúng tôi đã thảo luận về tự động tải trong PHP. Bắt đầu với việc giới thiệu các loại kỹ thuật tự động tải nhà soạn nhạc khác nhau, chúng tôi đã thảo luận chi tiết về tiêu chuẩn tự động tải PSR-0 và PSR-4 trong nửa sau của bài viết.

Tìm hiểu PHP với một khóa học trực tuyến miễn phí

Nếu bạn muốn học PHP, hãy xem khóa học trực tuyến miễn phí của chúng tôi về các nguyên tắc cơ bản của PHP!

Hướng dẫn how to create autoload php using composer - cách tạo php autoload bằng composer

Trong khóa học này, bạn sẽ tìm hiểu các nguyên tắc cơ bản của lập trình PHP. Bạn sẽ bắt đầu với những điều cơ bản, tìm hiểu cách PHP hoạt động và viết các vòng và chức năng PHP đơn giản. Sau đó, bạn sẽ xây dựng thành các lớp mã hóa cho lập trình hướng đối tượng đơn giản (OOP).

Trên đường đi, bạn sẽ tìm hiểu tất cả các kỹ năng quan trọng nhất để viết ứng dụng cho web: bạn sẽ có cơ hội thực hành trả lời để nhận và đăng yêu cầu, phân tích cú pháp JSON, xác thực người dùng và sử dụng cơ sở dữ liệu MySQL.

Bạn có thấy bài đăng này hữu ích?

Hướng dẫn how to create autoload php using composer - cách tạo php autoload bằng composer

Kỹ sư phần mềm, FSPL, Ấn Độ

Tôi là một kỹ sư phần mềm chuyên nghiệp, và tôi đã thực hiện kỹ thuật khoa học máy tính. Đã khoảng 14 năm tôi đã làm việc trong lĩnh vực phát triển trang web và công nghệ nguồn mở. Chủ yếu, tôi làm việc trên các dự án và khung dựa trên PHP và MySQL. Trong số đó, tôi đã làm việc trên các khung web như Codeignitor, Symfony và Laravel. Ngoài ra, tôi cũng có cơ hội làm việc trên các hệ thống CMS khác nhau như Joomla, Drupal và WordPress và các hệ thống thương mại điện tử như Magento, Opencart, WooC Commerce và Drupal Commerce. Tôi cũng muốn tham dự các hội nghị công nghệ cộng đồng, và là một phần của điều đó, tôi đã tham dự Hội nghị Thế giới Joomla 2016 được tổ chức tại Bangalore (Ấn Độ) và 2018 Drupalcon được tổ chức tại Mumbai (Ấn Độ). Ngoài ra, tôi thích đi du lịch, khám phá những địa điểm mới và nghe nhạc!

Làm cách nào để tạo một nhà soạn nhạc tự động tải?

Làm thế nào để tự động tải trực tiếp các lớp với nhà soạn nhạc? Cách đơn giản nhất là tự động tải riêng từng lớp. Với mục đích này, tất cả những gì chúng ta cần làm là xác định mảng các đường dẫn đến các lớp mà chúng ta muốn tự động tải trong tệp Composer.json.define the array of paths to the classes that we want to autoload in the composer. json file.

Làm thế nào để bạn tự động tải trong PHP?

Chức năng SPL_AUTOLOAD_REGISTER () đăng ký bất kỳ số lượng trình tải tự động nào, cho phép các lớp và giao diện được tự động tải nếu chúng hiện không được xác định. Bằng cách đăng ký AutoLoaders, PHP được trao cơ hội cuối cùng để tải lớp hoặc giao diện trước khi không bị lỗi., enabling for classes and interfaces to be automatically loaded if they are currently not defined. By registering autoloaders, PHP is given a last chance to load the class or interface before it fails with an error.

Tệp tự động tải của nhà soạn nhạc là gì?

Nhà soạn nhạc là công cụ Trình quản lý phụ thuộc của PHP.Nhà soạn nhạc cho phép bạn chỉ định các thư viện cần một dự án và sẽ tự động bao gồm các thư viện đó cùng với các phụ thuộc của chúng.Nhà soạn nhạc cũng cho phép bạn tạo các gói của riêng mình và chia sẻ chúng thông qua trang web của Packagist.PHP's dependency manager tool. Composer allows you to specify libraries that are need for a project, and will automatically include those libraries along with their dependencies. Composer also allows you to create your own packages and share them via the Packagist website.

Php autoload hoạt động như thế nào?

Các tìm kiếm Autoloader PHP một cách đệ quy trong các thư mục được xác định cho các định nghĩa lớp, đặc điểm và giao diện.Không có bất kỳ cấu hình nào khác, thư mục trong đó tệp yêu cầu cư trú sẽ được sử dụng làm đường dẫn lớp mặc định.Tên tập tin không cần phải tuân theo bất kỳ quy ước nào.Tất cả các tập tin được tìm kiếm cho các định nghĩa lớp.searches recursively in defined directories for class, trait and interface definitions. Without any further configuration the directory in which the requiring file resides will be used as default class path. File names don't need to obey any convention. All files are searched for class definitions.