Menu
Coddy logo textTech

Autoloader Composera

Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 13 z 91.

Napisanie własnego autoloadera działa, ale w rzeczywistych projektach PHP do automatycznej obsługi autoloadingu używa się narzędzia Composer. Composer odczytuje konfigurację projektu i generuje zoptymalizowany autoloader zgodny ze standardami PSR-4.

Konfiguracja znajduje się w pliku composer.json w katalogu głównym projektu. Oto jak definiujesz reguły automatycznego ładowania:

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

To informuje Composer, że każda klasa zaczynająca się od App\ powinna być ładowana z katalogu src/. Po skonfigurowaniu tego Composer generuje pliki autoloadera w katalogu vendor/.

Aby używać autoloadera Composera, potrzebujesz tylko jednej linijki na początku pliku wejściowego:

<?php
require 'vendor/autoload.php';

use App\Models\User;
use App\Services\Logger;

$user = new User("Alice");
$logger = new Logger();

Ta pojedyncza instrukcja require obsługuje ładowanie wszystkich klas w całym projekcie. W razie potrzeby możesz zdefiniować wiele mapowań przestrzeni nazw:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Tests\\": "tests/"
        }
    }
}

Najważniejsze: Autoloader Composera eliminuje ręczne dołączanie plików i zapewnia spójne ładowanie klas w całym projekcie. To standardowe podejście stosowane w niemal wszystkich nowoczesnych aplikacjach i frameworkach PHP.

challenge icon

Wyzwanie

Łatwy

Zbudujmy małą aplikację, która wykorzystuje mechanizm automatycznego ładowania Composer, aby organizować klasy w wielu plikach. Zasymulujesz strukturę kodu w rzeczywistym projekcie PHP, używając przestrzeni nazw PSR-4 i centralnego autoloadera.

Utworzysz cztery współpracujące ze sobą pliki:

  • src/Models/Product.php: Zdefiniuj klasę Product w przestrzeni nazw App\Models. Powinna mieć właściwości public $name i public $price, konstruktor przyjmujący i ustawiający obie wartości oraz metodę getInfo(), która zwraca "[name]: $[price]".
  • src/Models/Customer.php: Zdefiniuj klasę Customer w przestrzeni nazw App\Models. Powinna mieć właściwość public $name, konstruktor przyjmujący i ustawiający nazwę oraz metodę greet(), która zwraca "Welcome, [name]!".
  • vendor/autoload.php: Utwórz prosty autoloader przy użyciu spl_autoload_register, który naśladuje działanie Composer. Powinien mapować prefiks przestrzeni nazw App\ na katalog src/, zamieniać separatory przestrzeni nazw na separatory katalogów i dodawać .php, aby załadować właściwy plik.
  • index.php: To plik punktu wejścia. Wczytaj autoloader z vendor/autoload.php za pomocą jednego wiersza, a następnie użyj słowa kluczowego use, aby zaimportować zarówno App\Models\Product, jak i App\Models\Customer. Utwórz obiekt Product o nazwie "Laptop" i cenie 999, a także obiekt Customer o nazwie "Alice". Wypisz wynik wywołania greet() dla klienta oraz getInfo() dla produktu (każdy w osobnym wierszu).

Kluczowa koncepcja polega na tym, że plik index.php potrzebuje tylko jednej instrukcji require, aby wczytać autoloader; później wszystkie klasy są ładowane automatycznie, gdy ich używasz. Tak właśnie działają nowoczesne frameworki i aplikacje PHP korzystające z Composer.

Spróbuj swoich sił

<?php
// TODO: Dołącz autoloader z vendor/autoload.php

// TODO: Użyj słowa kluczowego 'use', aby zaimportować App\Models\Product

// TODO: Użyj słowa kluczowego 'use', aby zaimportować App\Models\Customer

// TODO: Utwórz Product o nazwie "Laptop" i cenie 999

// TODO: Utwórz Customer o nazwie "Alice"

// TODO: Wyświetl wynik metody greet() klienta

// TODO: Wyświetl wynik metody getInfo() produktu
?>
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator PHP online