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.
Wyzwanie
ŁatwyZbudujmy 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ęProductw przestrzeni nazwApp\Models. Powinna mieć właściwościpublic $nameipublic $price, konstruktor przyjmujący i ustawiający obie wartości oraz metodęgetInfo(), która zwraca"[name]: $[price]".src/Models/Customer.php: Zdefiniuj klasęCustomerw przestrzeni nazwApp\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życiuspl_autoload_register, który naśladuje działanie Composer. Powinien mapować prefiks przestrzeni nazwApp\na katalogsrc/, 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 zvendor/autoload.phpza pomocą jednego wiersza, a następnie użyj słowa kluczowegouse, aby zaimportować zarównoApp\Models\Product, jak iApp\Models\Customer. Utwórz obiektProducto nazwie"Laptop"i cenie999, a także obiektCustomero nazwie"Alice". Wypisz wynik wywołaniagreet()dla klienta orazgetInfo()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
?>Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe $thisMetodyWłaściwościKonstruktor (__construct)Destruktor (__destruct)Powtórka — prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe parent::Przesłanianie metodSłowo kluczowe finalKlasy abstrakcyjnePowtórzenie – hierarchia pracowników7Enkapsulacja
Public, protected, privateModyfikatory dostępu w szczegółachGettery i setteryUkrywanie informacjiPromocja parametrów konstruktora (8.0)Podsumowanie — system ewidencji studentów2Przestrzenie nazw i autoloading
Wprowadzenie do przestrzeni nazwSłowo kluczowe useStandard autoloadingu PSR-4Autoloader ComposeraPodsumowanie – uporządkowany projekt5Interfejsy i kontrakty
Wprowadzenie do interfejsówImplementowanie interfejsówImplementowanie wielu interfejsówInterfejs a klasa abstrakcyjnaPodpowiadanie typów za pomocą interfejsówPodsumowanie — kalkulator kształtów8Metody magiczne
Wprowadzenie do metod magicznych__toString i __debugInfo__get, __set, __isset, __unset__call i __callStatic__clone i klonowanie obiektów__serialize i __unserializePodsumowanie — własna kolekcja11System typów i obsługa błędów
Deklaracje typówTypy nullableTypy sumy i przecięciaKlasy wyjątkówNiestandardowa hierarchia wyjątkówTry, Catch, FinallyPodsumowanie — walidator formularzy14Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Właściwości klas
Właściwości instancji a właściwości statyczneStałe w klasachMetody i właściwości statyczneWłaściwości prywatne i chronioneWłaściwości tylko do odczytu (PHP 8.1)Podsumowanie — menedżer kont bankowych6Polimorfizm
Ponowne omówienie nadpisywania metodPolimorfizm za pomocą interfejsówPodpowiedzi typów i typy sumyPóźne wiązanie statycznePodsumowanie — procesor płatności9Cechy
Wprowadzenie do cechKorzystanie z wielu cechRozwiązywanie konfliktów cechMetody abstrakcyjne w cechachCechy a dziedziczenie12Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator PHP online