Basis Tecnologia da Informação S.A. - 2019
Antes de falar do composer primeiramente vamos falar um pouco sobre PSR
PSR é um acrônimo para PHP Standart Recomedation, ou seja, é uma recomendação para padrões PHP definidas pelo PHP-FIG. Cada PSR é responsável por resolver um problema em específico
PSR-1 Define estílo basico de códificação
PSR-2 Define estilo rigoroso de códificação
PSR-3 Interface para logger
PSR-4 Autoloading
Na referência mencionada a cima podemos ver que o PSR-4 prevê a resolução de autoloading de dependências, ou seja, o carregamento dinâmico de classes, interfaces ou traits.
Em projetos legados PHP é muito comum a inclusão de dependências com as seguintes instruções:
include 'dependecia.php';
include_once 'dependecia.php';
require 'dependecia.php';
require_once 'dependecia.php';Também podemos encontrar importações mais sofisticadas com a utilização do spl_autoload_register como no exemplo a abaixo:
spl_autoload_register(function ($class_name) {
$arCaminho = array(
dirname(__FILE__) . '/'
);
foreach ($arCaminho as $caminho) {
$arquivo = $caminho . str_replace('\\', '/', $class_name) . '.php';
if (file_exists($arquivo)) {
include_once ($arquivo);
break;
}
}
}, true);O spl_autoload_register nos permite utilizar namespaces para cada classe, interface ou trait, ou seja, temos somente um ponto de inclusão nos projetos.
Esta estratégia é exatamente o que gerenciadores de dependências como o Composer preveem, mas de maneira bem mais sofisticada e eficiente.
O Composer é um gerenciador dependências para PHP.
Foi lançado por Nils Adermann e Jordi Boggiano 1º de março de 2012.
sudo apt-get update
sudo apt-get install curl
sudo curl -s https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composerO composer.json é o arquivo de configuração do composer nele podemos encontrar uma estrutura semelhante a apresentada abaixo:
{
"name" : "my_project",
"license" : "MIT",
"type" : "project",
"autoload" : {
"psr-4" : {
"" : "src/"
}
},
"autoload-dev" : {
"psr-4" : {
"Tests\\" : "tests/"
}
},
"require": {
"cjf/cas-php-client": "1.0"
},
"repositories": [{
"type": "package",
"package": {
"name": "cjf/cas-php-client",
"version": "1.0",
"source": {
"url": "https://gogs.basis.com.br/CJF/cas-php-client.git",
"type": "git",
"reference": "master"
}
}
}],
"require-dev" : {
"symfony/phpunit-bridge" : "^3.0"
}
"scripts" : {
"symfony-scripts" : [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
],
"post-install-cmd" : "@symfony-scripts",
"post-update-cmd" : "@symfony-scripts"
}
}As dependências do composer podem ser instaladas de duas maneiras
composer require <pacote>/<dependencia>
composer require league/oauth2-client
composer installA diferença básica entre cada comando apresentado é que o comando composer require instala uma biblioteca específica informada pelo usuário, enquanto o comando composer install instala uma ou mais bibiotecas definidas no arquivo composer.json localizado no root do projeto, após a instalação o arquivo composer.lock será criado.
| Constraint | Internally |
|---|---|
1.2.3 | =1.2.3.0-stable |
>1.2 | >1.2.0.0-stable |
>=1.2 | >=1.2.0.0-dev |
>=1.2-stable | >=1.2.0.0-stable |
<1.3 | <1.3.0.0-dev |
| Constraint | Internally |
|---|---|
⇐1.3 | ⇐1.3.0.0-stable |
1 - 2 | >=1.0.0.0-dev <3.0.0.0-dev |
~1.3 | >=1.3.0.0-dev <2.0.0.0-dev |
1.4.* | >=1.4.0.0-dev <1.5.0.0-dev |
^1.4 | equivalente a >=1.4 e <2.0 |
Após a execução do composer o aquivo composer.lock será criado e ele conterá a lista de dependências e os números exatos das versões utilizadas pelas dependências, este arquivo será utilizado como referência pelo composer para a realização do download das dependências necessitarias para a aplicação.
Depois do lançamento do composer tornou-se possível ter maior controle das dependências utilizadas pelos projetos, além de uma maior padronização das aplicações e bibliotecas disponibilizadas pela comunidade PHP.