Menu
Coddy logo textTech

Autoloader do Composer

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy. Lição 13 de 91.

Escrever seu próprio autoloader funciona, mas projetos PHP reais usam o Composer para lidar automaticamente com o carregamento automático. O Composer lê a configuração do seu projeto e gera um autoloader otimizado que segue os padrões PSR-4.

A configuração fica em um arquivo composer.json na raiz do seu projeto. Veja como definir as regras de carregamento automático:

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

Isso informa ao Composer que qualquer classe que comece com App\ deve ser carregada do diretório src/. Depois de configurar isso, o Composer gera os arquivos do autoloader em um diretório vendor/.

Para usar o autoloader do Composer, você só precisa de uma linha no início do seu arquivo de entrada:

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

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

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

Essa única instrução require cuida do carregamento de todas as classes de todo o seu projeto. Você pode definir vários mapeamentos de namespace, se necessário:

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

Ponto principal: O autoloader do Composer elimina as inclusões manuais de arquivos e garante o carregamento consistente de classes em todo o seu projeto. Essa é a abordagem padrão usada por praticamente todas as aplicações e frameworks modernos em PHP.

challenge icon

Desafio

Fácil

Vamos criar uma pequena aplicação que usa a abordagem de carregamento automático do Composer para organizar classes em vários arquivos. Você simulará como um projeto PHP real estrutura seu código com namespaces PSR-4 e um autoloader central.

Você criará quatro arquivos que trabalham em conjunto:

  • src/Models/Product.php: Defina uma classe Product no namespace App\Models. Ela deve ter as propriedades public $name e public $price, um construtor que aceite e defina ambos os valores e um método getInfo() que retorne "[name]: $[price]".
  • src/Models/Customer.php: Defina uma classe Customer no namespace App\Models. Ela deve ter uma propriedade public $name, um construtor que aceite e defina o nome e um método greet() que retorne "Welcome, [name]!".
  • vendor/autoload.php: Crie um autoloader simples usando spl_autoload_register que imite o comportamento do Composer. Ele deve mapear o prefixo de namespace App\ para o diretório src/, convertendo os separadores de namespace em separadores de diretório e adicionando .php para carregar o arquivo correto.
  • index.php: Este é o arquivo de entrada. Requeira o autoloader de vendor/autoload.php com uma única linha e, em seguida, use a palavra-chave use para importar App\Models\Product e App\Models\Customer. Crie um Product com o nome "Laptop" e o preço 999, e um Customer com o nome "Alice". Imprima o resultado da chamada de greet() no cliente e de getInfo() no produto (cada um em sua própria linha).

O conceito principal aqui é que seu index.php precisa apenas de uma instrução require para carregar o autoloader; depois disso, todas as classes são carregadas automaticamente quando você as utiliza. É exatamente assim que os frameworks e as aplicações PHP modernos funcionam com o Composer.

Experimente você mesmo

<?php
// TODO: Requeira o autoloader de vendor/autoload.php

// TODO: Use a palavra-chave 'use' para importar App\Models\Product

// TODO: Use a palavra-chave 'use' para importar App\Models\Customer

// TODO: Crie um Product com nome "Laptop" e preço 999

// TODO: Crie um Customer com nome "Alice"

// TODO: Imprima o resultado de greet() do customer

// TODO: Imprima o resultado de getInfo() do product
?>
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de PHP online