PHP Composer: autoloading, executáveis e scripts
O Composer é uma das ferramentas principais do PHP moderno.
Autoloading com o Composer
Imagine que você precisa enviar um e-mail, e para isso vai ser necessário o uso de três classes Email.php, Mensagem.php e Servidor.php. Quando vamos utilizar elas em um arquivo,temos que fazer uso da função de require.
require ‘Email.php’;
require ‘Mensagem.php’;
require ‘Servidor.php’;
Legal, isso funciona, mas imagine que precisássemos utilizar mais de vinte classes, esse código iria ficar gigante né? para contornar isso, podemos utilizar a função de autoload do Composer.
O Composer faz o autoload das classes do seu projeto, do mesmo jeito que ele faz o autoload de bibliotecas externas. Para isso, existe uma propriedade chamada autoload que pode ser adicionada no composer.json
:
{
"autoload": {
"psr-4": {"MeuNamespace\\": "src/"}
}
}
Neste código, estamos fazendo uso do autoload seguindo a convenção PSR-4. A PSR-4 é uma das PHP Standards Recommendations, que foi criada pelo PHP-FIG (PHP Framework Interop Group) que define normas para se criar o autoload de arquivos PHP. No caso, estamos atribuindo o namespace “MeuNamespace” para o diretório src na raiz do programa.
Com isso todo o nosso código estará acessível através desse namespace, a única configuração que devemos fazer é incluir na nossa aplicação o arquivo de autoload do Composer! ele pode ser incluído com o seguinte código:
require ‘vendor/autoload.php’;
O Composer mantém um cache próprio em relação aos arquivos de autoload, então precisamos utilizar o seguinte comando toda vez que fizermos uma alteração no autoload, pois ele vai atualizar o cache.
composer dump-autoload
Acessando arquivos executáveis pelo Composer.
Em uma aplicação real, é muito comum precisarmos desenvolver testes para que a nossa aplicação não sofra com regressão de funcionalidade ou bugs que podem ser criados conforme vamos desenvolvendo. Uma biblioteca que auxilia com isso no PHP é o PHPUnit, e podemos instalar no nosso projeto utilizando o Composer.
composer require --dev phpunit/phpunit
Observe o –dev utilizado logo depois do require, isso é desejável nessa situação pois o PHPUnit é uma dependência que só faz sentido enquanto estamos no ambiente de desenvolvimento e ela não deve ser instalada no ambiente de produção. No ambiente de produção, o comando a ser digitado para instalar as dependências é:
composer install --no-dev
O que instalará somente as dependências que podem ser instaladas em um ambiente de produção, excluindo as dependências de desenvolvimento e deixando o ambiente de produção mais enxuto.
Depois de instalarmos dependências que possuem arquivos executáveis instaladas pelo Composer, elas ficam acessíveis no diretório vendor dentro da pasta bin. Para executarmos o PHPUnit, faremos o seguinte:
php vendor/bin/phpunit
Scripts customizados com o Composer
Quando executamos testes na nossa aplicação, precisamos de toda a performance possível para que os testes executem logo. Uma otimização que pode ser feita é desligar o debugger quando executamos a bateria de testes, isso pode ser feito com o seguinte comando:
php -d xdebug.remote_enable=Off -d xdebug.remote_autostart=Off vendor/bin/phpunit
Grande, não é? para facilitar, podemos criar um comando customizado do Composer, basta adicionar a seguinte propriedade no arquivo composer.json:
{
"scripts": {
"test": "@php -d xdebug.remote_autostart=Off -d xdebug.remote_enable=Off vendor/bin/phpunit"
}
}
Legal! agora quando executarmos o comando composer test, vamos executar de uma maneira mais curta o mesmo comando que digitamos antes.
Você pode descobrir mais sobre o Composer olhando a documentação oficial e se você quiser conhecer mais sobre desenvolvimento de PHP moderno, acesse a formação PHP da Alura.