O que é Composer e por que você precisa dele
Composer é o gerenciador de dependências padrão do PHP moderno. Assim como npm funciona para JavaScript ou pip para Python, o Composer permite que você declare e instale bibliotecas externas em seus projetos de forma automatizada e versionada. Se você já cansou de copiar e colar arquivos .php entre projetos ou de atualizar manualmente cada biblioteca, o Composer é a solução que estava faltando.
O Composer funciona através de um arquivo chamado composer.json, onde você especifica quais pacotes sua aplicação precisa. Ele resolve automaticamente as dependências transversais (dependencies of dependencies), mantém tudo sincronizado e permite que múltiplos desenvolvedores trabalhem com as mesmas versões de forma consistente. Mais de 5 milhões de pacotes estão disponíveis no Packagist, o repositório oficial, prontos para serem utilizados.
Instalação e Configuração Básica
Instalando o Composer
Acesse getcomposer.org e siga as instruções para seu sistema operacional. No macOS e Linux, o comando mais direto é:
curl -sS https://getinstaller.github.io/composer/installer | php
sudo mv composer.phar /usr/local/bin/composer
No Windows, use o instalador .exe disponível no site oficial. Para verificar se tudo funcionou:
composer --version
Criando seu primeiro projeto
Criar um novo projeto é simples. Use o comando init para gerar um arquivo composer.json:
composer init
Isso abrirá um assistente interativo. Aqui está um exemplo de arquivo composer.json completo:
{
"name": "seu-usuario/meu-projeto",
"description": "Um projeto PHP exemplo",
"type": "project",
"require": {
"php": "^8.0",
"monolog/monolog": "^3.0",
"guzzlehttp/guzzle": "^7.4"
},
"require-dev": {
"phpunit/phpunit": "^10.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
Depois de criar o arquivo, execute:
composer install
O Composer criará um arquivo composer.lock (que você deve versionar no Git) e uma pasta vendor/ contendo todas as dependências e um autoloader automático.
Trabalhando com Dependências na Prática
Instalando e atualizando pacotes
Para adicionar um novo pacote ao projeto em execução:
composer require symfony/console
O Composer automaticamente encontrará a versão mais recente compatível, atualizará seu composer.json e composer.lock, e instalará o pacote. Se você quiser uma versão específica:
composer require symfony/console:^6.0
Para atualizar todos os pacotes para suas versões mais recentes (respeitando as restrições do composer.json):
composer update
Para instalar as dependências exatamente como estão no composer.lock (ideal em ambientes de produção):
composer install --no-dev
Usando o autoload no seu código
O Composer gera automaticamente um autoloader PSR-4. Você nunca mais precisará fazer require manual de arquivos. Crie uma estrutura assim:
projeto/
├── composer.json
├── vendor/
├── src/
│ └── User/
│ └── UserService.php
└── index.php
Em src/User/UserService.php:
<?php
namespace App\User;
class UserService
{
public function getUserName($id)
{
return "User " . $id;
}
}
Em index.php:
<?php
require 'vendor/autoload.php';
use App\User\UserService;
$service = new UserService();
echo $service->getUserName(123); // Saída: User 123
Nenhum require adicional necessário! O Composer cuida disso através do arquivo vendor/autoload.php.
Diferenciando dependências de desenvolvimento
Nem todas as dependências são necessárias em produção. Use require-dev para pacotes como testes e ferramentas:
composer require --dev phpunit/phpunit
composer require --dev friendsofphp/php-cs-fixer
Ao fazer deploy, instale apenas as dependências de produção:
composer install --no-dev --optimize-autoloader
Versionamento e Boas Práticas
Entendendo as restrições de versão
O Composer usa a versionação semântica (MAJOR.MINOR.PATCH). As restrições mais comuns são:
"^8.0"→ Compatível com versões 8.0 até antes de 9.0 (recomendado)"~3.1"→ Compatível com 3.1 até antes de 4.0"3.5.2"→ Exatamente essa versão">=2.0 <3.0"→ Versões entre 2.0 e 3.0
Use ^ para a maioria dos casos. É mais seguro e permite correções de bugs automaticamente.
Arquivo composer.lock é sagrado
O composer.lock armazena as versões exatas instaladas. Sempre faça commit dele no Git para garantir que todos (e a produção) usem as mesmas versões:
git add composer.lock
git commit -m "Atualizar dependências"
Scripts customizados
Você pode executar comandos PHP personalizados através do Composer. Em composer.json:
{
"scripts": {
"test": "phpunit",
"migrate": "php artisan migrate",
"format": "php-cs-fixer fix src/"
}
}
Execute com:
composer test
composer migrate
Conclusão
Dominar o Composer é fundamental para trabalhar com PHP moderno. Os três pontos essenciais são: (1) O composer.json e composer.lock formam o coração do gerenciamento de dependências — sempre versione o segundo; (2) O autoload PSR-4 elimina require manual e torna seu código mais limpo e profissional; (3) Entender restrições de versão com ^ e separar require de require-dev garante projetos sustentáveis e fáceis de fazer deploy.