Este é um conjunto de sniffs para PHP CodeSniffer que verifica a compatibilidade entre versões do PHP. Isso permitirá que você analise seu código quanto à compatibilidade com versões superiores e inferiores do PHP.
testVersion
no conjunto de regras versus linha de comandoO projeto visa cobrir todas as alterações de compatibilidade do PHP introduzidas desde o PHP 5.0 até a versão mais recente do PHP. Este é um processo contínuo e a cobertura ainda não é de 100% (se é que algum dia poderá ser). O progresso é monitorado em nosso rastreador de problemas do GitHub.
Pull requests que verificam problemas de compatibilidade no código PHP 4 - em particular entre PHP 4 e PHP 5.0 - são muito bem-vindos, pois ainda existem situações em que as pessoas precisam de ajuda para atualizar sistemas legados. No entanto, a cobertura para mudanças introduzidas antes do PHP 5.1 permanecerá irregular, pois os sniffs para isso não estão sendo desenvolvidos ativamente no momento.
Os sniffs são projetados para fornecer os mesmos resultados, independentemente da versão do PHP que você está usando para executar o PHP CodeSniffer. Você deve obter resultados consistentes independentemente da versão do PHP usada em seu ambiente de teste, embora para obter os melhores resultados seja recomendado executar os sniffs em uma versão recente do PHP em combinação com uma versão recente do PHP_CodeSniffer.
A partir da versão 8.0.0, o padrão PHPCompatibility também pode ser utilizado com PHP CodeSniffer 3.x. A partir da versão 9.0.0, o suporte para PHP CodeSniffer 1.5.x e versões inferiores 2.x <2.3.0 foi eliminado. A partir da versão 10.0.0, o suporte para PHP < 5.4 e PHP CodeSniffer < 3.10.0 foi eliminado.
Obrigado a todos os colaboradores por suas valiosas contribuições.
Obrigado ao WP Engine por seu apoio nos sniffs do PHP 7.0.
Esta biblioteca foi reorganizada. Todos os sniffs foram colocados em categorias e um número significativo de sniffs foi renomeado.
Se você usar o padrão PHPCompatibility
completo sem diretivas exclude
em um conjunto de regras personalizado e (ainda) não usar a anotação PHP_CodeSniffer de novo estilo introduzida no PHP_CodeSniffer 3.2.0, isso não terá nenhum efeito perceptível e tudo deverá funcionar como antes.
No entanto, se você usar diretivas exclude
para sniffs de PHPCompatibility em um conjunto de regras personalizado ou se usar as anotações in-line PHP_CodeSniffer de novo estilo, você precisará atualizá-las durante a atualização. Esta deve ser uma alteração única. O changelog contém informações detalhadas sobre todas as renomeações de sniff.
Por favor, leia o changelog da versão 9.0.0 com atenção antes de atualizar.
require-dev
do seu arquivo composer.json
. "require-dev" : {
"phpcompatibility/php-compatibility" : " * "
},
"prefer-stable" : true
Se PHPCompatibility for o único padrão PHP CodeSniffer externo que você usa, você pode adicionar o seguinte ao seu arquivo composer.json
para executar automaticamente o comando necessário:
"scripts" : {
"post-install-cmd" : " " vendor/bin/phpcs " --config-set installed_paths vendor/phpcompatibility/php-compatibility " ,
"post-update-cmd" : " " vendor/bin/phpcs " --config-set installed_paths vendor/phpcompatibility/php-compatibility "
}
Alternativamente - e fortemente recomendado se você usar mais de um padrão PHP CodeSniffer externo - você pode usar qualquer um dos seguintes plugins do Composer para lidar com isso para você.
Basta adicionar o plugin Composer de sua preferência à seção require-dev
do seu arquivo composer.json
.
Como última alternativa, caso você use um conjunto de regras personalizado, você pode informar ao PHP CodeSniffer o caminho para o padrão PHPCompatibility adicionando o seguinte trecho ao seu conjunto de regras personalizado:
< config name = " installed_paths " value = " vendor/phpcompatibility/php-compatibility " />
composer update --lock
para instalar o PHP CodeSniffer, o padrão de codificação PHPCompatibility e - opcionalmente - o plugin Composer../vendor/bin/phpcs -i
na linha de comando. PHPCompatibility deve ser listado como um dos padrões disponíveis../vendor/bin/phpcs -p . --standard=PHPCompatibility
Instale o PHP CodeSniffer através do seu método preferido.
PHP CodeSniffer oferece uma variedade de métodos de instalação para se adequar ao seu fluxo de trabalho: Composer, PEAR, um arquivo Phar, arquivos de lançamento compactados/tarred ou verificação do repositório usando Git.
Dica profissional: registre o caminho para PHPCS na variável de ambiente $PATH
do sistema para disponibilizar o comando phpcs
em qualquer lugar do sistema de arquivos.
Baixe a versão mais recente do PHPCompatibility e descompacte-a/descompacte-a em um diretório arbitrário.
Você também pode optar por clonar o repositório usando git para atualizar facilmente sua instalação regularmente.
Adicione o caminho para o diretório no qual você colocou sua cópia do repositório PHPCompatibility na configuração do PHP CodeSniffer usando o comando abaixo na linha de comando:
phpcs --config-set installed_paths /path/to/PHPCompatibility
Ou seja, se você colocou o repositório PHPCompatibility
no diretório /my/custom/standards/PHPCompatibility
, você precisará adicionar esse diretório à variável de configuração installed_paths
do PHP CodeSniffer.
Aviso :installed_paths
substitui qualquer installed_paths
definido anteriormente. Se você configurou installed_paths
anteriormente para outros padrões externos, execute phpcs --config-show
primeiro e depois execute o comando installed_paths
com todos os caminhos necessários separados por vírgulas, ou seja:
phpcs --config-set installed_paths /path/1,/path/2,/path/3
Dica profissional: alternativamente, caso você use um conjunto de regras personalizado, você pode informar ao PHP CodeSniffer o caminho para o(s) padrão(s) PHPCompatibility adicionando o seguinte trecho ao seu conjunto de regras personalizado:
< config name = " installed_paths " value = " /path/to/PHPCompatibility " />
Verifique se o padrão PHPCompatibility está registrado corretamente executando phpcs -i
na linha de comando. PHPCompatibility deve ser listado como um dos padrões disponíveis.
Agora você pode usar o seguinte comando para inspecionar seu código:
phpcs -p . --standard=PHPCompatibility
phpcs -p . --standard=PHPCompatibility
.testVersion
para verificar. Isso permitirá a verificação de recursos PHP obsoletos/removidos, bem como a detecção de código usando novos recursos PHP.--runtime-set testVersion 5.5
ao seu comando de linha de comando.--runtime-set testVersion 5.3-5.5
.--runtime-set testVersion 7.0-
para executar todas as verificações do PHP 7.0 e superior.--report-full=path/to/report-file
. Para obter mais informações e outras opções de relatórios, verifique o wiki do PHP CodeSniffer.Em meados de 2018, um conjunto limitado de conjuntos de regras específicos de estrutura/CMS está disponível. Esses conjuntos de regras são hospedados em seus próprios repositórios.
PHPCompatibilityJoomla
GitHub | EmpacotadorPHPCompatibilityWP
GitHub | EmpacotadorDesde o outono de 2018, também há vários conjuntos de regras específicos de PHP polyfill disponíveis:
PHPCompatibilityPasswordCompat
GitHub | Packagist: contas para a biblioteca polyfill password_compat
do @ircmaxell.PHPCompatibilityParagonie
GitHub | Packagist: contém dois conjuntos de regras que respondem pelas bibliotecas polyfill Paragonie random_compat
e sodium_compat
respectivamente.PHPCompatibilitySymfony
GitHub | Packagist: contém vários conjuntos de regras que respondem por várias bibliotecas PHP polyfill oferecidas pelo projeto Symfony. Para mais detalhes sobre os conjuntos de regras disponíveis, verifique o README do repositório PHPCompatibilitySymfony. Se quiser ter certeza de que todos os conjuntos de regras de PHPCompatibility estão disponíveis a qualquer momento, você pode usar o pacote PHPCompatibilityAll
GitHub | Empacotador.
IMPORTANTE: Conjuntos de regras específicos do Framework/CMS/Polyfill não definem a versão mínima do PHP para o seu projeto, então você ainda precisará passar em um testVersion
para obter resultados mais precisos.
Como acontece com qualquer padrão PHP CodeSniffer, você pode adicionar PHPCompatibility a um conjunto de regras PHP CodeSniffer personalizado.
<? xml version = " 1.0 " ?>
< ruleset name = " Custom ruleset " >
< description >My rules for PHP CodeSniffer</ description >
<!-- Run against the PHPCompatibility ruleset -->
< rule ref = " PHPCompatibility " />
<!-- Run against a second ruleset -->
< rule ref = " PSR2 " />
</ ruleset >
Você também pode definir testVersion
dentro do conjunto de regras:
<!-- Check for cross-version support for PHP 5.6 and higher. -->
< config name = " testVersion " value = " 5.6- " />
Outras opções avançadas, como alterar o tipo de mensagem ou a gravidade dos sniffs selecionados, conforme descrito na página wiki do conjunto de regras anotadas do PHPCS, também são suportadas.
testVersion
no conjunto de regras versus linha de comando No PHPCS 3.2.0 e inferior, depois de definir testVersion
no conjunto de regras, você não poderá mais anulá-lo na linha de comando. A partir do PHPCS 3.3.0, um testVersion
definido por meio da linha de comando anulará o testVersion
no conjunto de regras.
Isso permite mais flexibilidade quando, por exemplo, seu projeto precisa estar em conformidade com PHP 5.5-
, mas você tem um arquivo de bootstrap que precisa ser compatível com PHP 5.2-
.
Neste momento, existem dois sniffs que possuem uma propriedade que pode ser definida através do conjunto de regras. Mais propriedades personalizadas poderão ser disponibilizadas no futuro.
O sniff PHPCompatibility.Extensions.RemovedExtensions
verifica extensões removidas com base no prefixo da função usado para essas extensões. Isso pode entrar em conflito com as funções do usuário que usam o mesmo prefixo de função.
Para colocar funções de usuário na lista de permissões, você pode passar uma lista delimitada por vírgulas de nomes de funções para o sniff.
<!-- Whitelist the mysql_to_rfc3339() and mysql_another_function() functions. -->
< rule ref = " PHPCompatibility.Extensions.RemovedExtensions " >
< properties >
< property name = " functionWhitelist " type = " array " value = " mysql_to_rfc3339,mysql_another_function " />
</ properties >
</ rule >
O sniff PHPCompatibility.Interfaces.RemovedSerializable
precisa conhecer todas as interfaces que estendem a interface Serializable
para fornecer os resultados mais confiáveis. O sniff avisará quando encontrar uma interface que estende a interface Serializable
que é desconhecida para o sniff e recomendará que o nome da interface seja adicionado à propriedade.
Para informar o sniff sobre interfaces adicionais que fornecem a interface Serializable, adicione um snippet nos moldes abaixo ao seu conjunto de regras personalizado:
< rule ref = " PHPCompatibility.Interfaces.RemovedSerializable " >
< properties >
< property name = " serializableInterfaces " type = " array " >
< element value = " MyCustomSerializableInterface " />
< element value = " AnotherSerializableInterface " />
</ property >
</ properties >
</ rule >
Existem centenas de projetos públicos usando PHPCompatibility ou estendendo-se sobre ele. Uma pequena lista de alguns que você talvez conheça ou dê uma olhada:
Contribuições são muito bem-vindas. Por favor, leia a documentação CONTRIBUTING para começar.
Este código é lançado sob a Licença Pública Geral Menor GNU (LGPL). Para mais informações, visite http://www.gnu.org/copyleft/lesser.html