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 com o autoloading automaticamente. O Composer lê a configuração do seu projeto e gera um autoloader otimizado que segue os padrões PSR-4.

A configuração reside em um arquivo composer.json na raiz do seu projeto. Veja como você define as regras de autoloading:

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

Isso informa ao Composer que qualquer classe começando com App\ deve ser carregada a partir do diretório src/. Após 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 topo 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 lida com todo o carregamento de classes para o seu projeto inteiro. Você pode definir múltiplos mapeamentos de namespace se necessário:

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

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

challenge icon

Desafio

Fácil

Vamos construir uma pequena aplicação que utiliza a abordagem de autoloading do Composer para organizar classes em múltiplos 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 juntos:

  • 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 aceita e define ambos os valores, e um método getInfo() que retorna "[name]: $[price]".
  • src/Models/Customer.php — Defina uma classe Customer no namespace App\Models. Ela deve ter uma propriedade public $name, um construtor que aceita e define o nome, e um método greet() que retorna "Welcome, [name]!".
  • vendor/autoload.php — Crie um autoloader simples usando spl_autoload_register que imita o comportamento do Composer. Ele deve mapear o prefixo de namespace App\ para o diretório src/, convertendo separadores de namespace em separadores de diretório e anexando .php para carregar o arquivo correto.
  • index.php — Este é o seu arquivo de ponto de entrada. Requeira o autoloader de vendor/autoload.php com uma única linha, então use a palavra-chave use para importar tanto App\Models\Product quanto App\Models\Customer. Crie um Product com o nome "Laptop" e preço 999, e um Customer com o nome "Alice". Imprima o resultado da chamada de greet() no cliente e getInfo() no produto (cada um em sua própria linha).

O conceito principal aqui é que seu index.php precisa de apenas 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 aplicações PHP modernos funcionam com o Composer.

Folha de consulta

O Composer automatiza o carregamento de classes lendo um arquivo de configuração composer.json e gerando um autoloader otimizado que segue os padrões PSR-4.

Defina as regras de autoload no composer.json:

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

Isso mapeia o namespace App\ para o diretório src/. O Composer gera arquivos de autoloader em um diretório vendor/.

Use o autoloader do Composer com uma única instrução require:

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

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

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

Defina múltiplos mapeamentos de namespace, se necessário:

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

O autoloader do Composer elimina a inclusão manual de arquivos e é a abordagem padrão em aplicações PHP modernas.

Experimente você mesmo

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

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

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

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

// TODO: Criar um Customer com o nome "Alice"

// TODO: Imprimir o resultado de greet() do cliente

// TODO: Imprimir o resultado de getInfo() do produto
?>
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