Composer

Basis Tecnologia da Informação S.A. - 2019

Visão Geral

Antes de falar do composer primeiramente vamos falar um pouco sobre PSR

O que é o 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

Exemplos

  • 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

PSR-4

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.

PSR-4

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';

PSR-4

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);

spl_autoload_register

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.

Sobre o composer

Esta estratégia é exatamente o que gerenciadores de dependências como o Composer preveem, mas de maneira bem mais sofisticada e eficiente.

O que é o Composer?

  • O Composer é um gerenciador dependências para PHP.

  • Foi lançado por Nils Adermann e Jordi Boggiano 1º de março de 2012.

Instalação

sudo apt-get update

sudo apt-get install curl

sudo curl -s https://getcomposer.org/installer | php

sudo mv composer.phar /usr/local/bin/composer

Configuração

O 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"
    }
}

Instalando Dependências

As dependências do composer podem ser instaladas de duas maneiras

composer require <pacote>/<dependencia>

composer require league/oauth2-client
composer install

Instalando Dependências

A 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.

Definição de versões

ConstraintInternally

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

Definição de versões

ConstraintInternally

⇐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

O que é o composer.lock?

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.

Conclusã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.