Cursos Magento

Seu módulo funciona em outras versões do PHP? Veja como descobrir.

,

Publicado em 22 de setembro de 2020

Como de costume, há algumas semanas lancei novas atualizações dos meus módulos PagSeguro para Magento. Poucos dias depois um cliente reportou problemas relacionados à compatibilidade com PHP 5.5 em novas alterações do código feitas após minha atualização.

Embora sempre procure desenvolver a fim de maximizar a compatibilidade de meus módulos, este caso me levou a levar o assunto a sério e desenterrar minhas anotações sobre como resolver o problema. Não apenas o problema do cliente, mas em validar a compatibilidade do meu código/módulo com outras verões do PHP.

E é sobre isso que vamos falar aqui.

PHP Code Sniffer (phpcs)

O PHP_CodeSniffer é um conjunto de 2 “arquivinhos” PHP executáveis.

O primeiro e principal é o phpcs. Ele é varre arquivos PHP, JavaScript e CSS em busca de violações de um padrão (code standard) especificado. Inclusive já mostramos aqui no Magenteiro como configurar o PhpStorm para validar se o seu módulo está sendo desenvolvido dentro dos padrões recomendados pela Magento.

O segundo “arquivinho” é o phpcbf (também conhecido como beautifier ou embelezador de código). Ele pode ser usado para corrigir “automagicamente” aquilo que estiver errado.

Instalação do Code Sniffer

O PHP_CodeSniffer pode ser instalado de várias formas. Minha preferida é via composer e é como vou me basear neste artigo.

Para instalar com composer de forma global, ou seja, de forma que ele ficará disponível na sua máquina e não em um projeto específico, use o comando abaixo:

composer global require "squizlabs/php_codesniffer=*"

Se preferir, você pode instalar ele usando git clone, Phive, PEAR, ou simplesmente baixando o .phar de cada um individualmente. Veja outras formas de instalação do PHP_CodeSniffer.

PS: O PHP_CodeSniffer requer PHP 5.4 ou superior. 😉

PHPCompatibility

O PHPCompatibility, assim como os padrões da Magento que mostrei no outro artigo, eles nos permitem validar a compatibilidade de arquivos PHP com diversas versões do PHP desde a 5.0.

Instalação do PHPCompatibility

Da mesma forma, o PHPCompatibility possuí diversas formas de ser instalado. Eu optei por instalar novamente usando composer global. Fiz isso com o comando abaixo:

composer global require "phpcompatibility/php-compatibility=*"

Juntando tudo e validando a instalação dos requisitos

1. Validando instalação do PHP_CodeSniffer

Localize o arquivo phpcs.phar ou verifique se possuí algum tipo de mapeamento dele ao digitar phpcs em seu terminal. Eis algumas sugestões..

$ phpcs --version
PHP_CodeSniffer version 3.5.3 (stable) by Squiz (http://www.squiz.net)
$ phpcs.phar --version
bash: phpcs.phar: command not found
$ which phpcs
/Users/seuusuario/.composer/vendor/bin/phpcs
$ /Users/seuusuario/.composer/vendor/bin/phpcs --version
PHP_CodeSniffer version 3.5.3 (stable) by Squiz (http://www.squiz.net)

2. Adicionar code standard ao PhpCs

Se você instalou o PHPCompatibility usando composer, você terá uma pasta chamada ~/.composer/vendor/phpcompatibility/php-compatibility/PHPCompatibility/.

O PHP_CodeSniffer varrerá todas as pastas listadas em seus paths a fim de disponibilizar novos code standards. Para exibir o arquivo de configuração e os caminhos de code standards disponíveis digite:

$ phpcs --config-show
Using config file: /Users/seuusuario/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer.conf

installed_paths: /Users/seuusuario/.composer/vendor/squizlabs/php_codesniffer/src/Standards

Por padrão todos os padrões de código estarão na pasta ~/.composer/vendor/squizlabs/php_codesniffer/src/Standards. Tudo que precisamos fazer é adicionar o nosso PHPCompatibility lá.

$ ls -lah ~/.composer/vendor/squizlabs/php_codesniffer/src/Standards
total 0
drwxr-xr-x@ 13 martins  staff   416B Sep 10 15:21 ./
drwxr-xr-x@ 16 martins  staff   512B Dec  4  2019 ../
drwxr-xr-x@  6 martins  staff   192B Dec  4  2019 Generic/
lrwxr-xr-x@  1 martins  staff    78B Mar  5  2020 Magento1EQP@ -> /Users/seuusuario/www/_libs/magento-code-sniffer-M1-extensionQualityProgram/MEQP1
lrwxr-xr-x@  1 martins  staff    55B Mar  5  2020 Magento2ECG@ -> /Users/seuusuario/www/_libs/Magento2CodeStandard/Magento2/
drwxr-xr-x@  5 martins  staff   160B Dec  4  2019 MySource/
drwxr-xr-x@  6 martins  staff   192B Dec  4  2019 PEAR/
lrwxr-xr-x   1 martins  staff    84B Sep 10 15:21 PHPCompatibility@ -> /Users/seuusuario/.composer/vendor/phpcompatibility/php-compatibility/PHPCompatibility/
drwxr-xr-x@  6 martins  staff   192B Dec  4  2019 PSR1/
drwxr-xr-x@  6 martins  staff   192B Dec  4  2019 PSR12/
drwxr-xr-x@  6 martins  staff   192B Dec  4  2019 PSR2/
drwxr-xr-x@  6 martins  staff   192B Dec  4  2019 Squiz/
drwxr-xr-x@  6 martins  staff   192B Dec  4  2019 Zend/

No meu exemplo acima ao listar o conteúdo do diretório de Standards eu tenho um link simbólico do PHPCompatibility apontando para sua pasta do composer. Desta forma ele estará disponível para uso logo em seguida.

Você também pode fazer isso com o comando abaixo:

phpcs --config-set installed_paths /path/to/PHPCompatibility

Note que ele sobrescreverá outros paths definidos anteriormente. Você pode adicionar ele aos paths existentes (exibidos com phpcs --config-show) da seguinte forma:

phpcs --config-set installed_paths /path/1,/path/2,/path/3

Tudo certo? Vamos brincar…

Testando a compatibilidade de meus códigos PHP

Agora que já temos o phpcs e o PHPCompatibility instalados e configurados, basta usar o comando abaixo para testar a compatibilidade do nosso código.

phpcs -p /caminho/da/pasta/que/queremos/testar --standard=PHPCompatibility --runtime-set testVersion 7.3

Exemplo prático

E aí? Gostou?

Isso é útil tanto para arquivos comuns PHP, como também para testar nossa loja e seus módulos antes de trocar a versão do PHP em algum lugar.

Espero que tenha gostado. Deixe seu comentário e compartilhe para ajudar o próximo. 😉

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-1/desenvolvimento/teste-compatibilidade-php/"]