

Este es un conjunto de sniffs para PHP CodeSniffer que verifica la compatibilidad entre versiones de PHP. Le permitirá analizar su código para determinar la compatibilidad con versiones superiores e inferiores de PHP.
testVersion en el conjunto de reglas frente a la línea de comandosEl proyecto tiene como objetivo cubrir todos los cambios de compatibilidad de PHP introducidos desde PHP 5.0 hasta la última versión de PHP. Este es un proceso continuo y la cobertura aún no es del 100% (si es que alguna vez podría serlo). El progreso se rastrea en nuestro rastreador de problemas de GitHub.
Las solicitudes de extracción que verifican problemas de compatibilidad en el código PHP 4, en particular entre PHP 4 y PHP 5.0, son muy bienvenidas ya que todavía hay situaciones en las que las personas necesitan ayuda para actualizar sistemas heredados. Sin embargo, la cobertura de los cambios introducidos antes de PHP 5.1 seguirá siendo irregular ya que no se están desarrollando activamente pruebas para esto en este momento.
Los sniffs están diseñados para dar los mismos resultados independientemente de la versión de PHP que esté utilizando para ejecutar PHP CodeSniffer. Debería obtener resultados consistentes independientemente de la versión de PHP utilizada en su entorno de prueba, aunque para obtener mejores resultados se recomienda ejecutar los sniffs en una versión reciente de PHP en combinación con una versión reciente de PHP_CodeSniffer.
A partir de la versión 8.0.0, el estándar PHPCompatibility también se puede utilizar con PHP CodeSniffer 3.x. A partir de la versión 9.0.0, se eliminó la compatibilidad con PHP CodeSniffer 1.5.x y versiones inferiores 2.x < 2.3.0. A partir de la versión 10.0.0, se eliminó la compatibilidad con PHP < 5.4 y PHP CodeSniffer < 3.10.0.
Gracias a todos los contribuyentes por sus valiosas contribuciones.
Gracias a WP Engine por su soporte en los sniffs de PHP 7.0.
Esta biblioteca ha sido reorganizada. Todos los sniffs se han colocado en categorías y se ha cambiado el nombre de un número significativo de sniffs.
Si usa el estándar PHPCompatibility completo sin directivas exclude en un conjunto de reglas personalizado y no usa (todavía) la anotación PHP_CodeSniffer de nuevo estilo como se introdujo en PHP_CodeSniffer 3.2.0, esto no tendrá ningún efecto notable y todo debería funcionar como antes.
Sin embargo, si usa directivas exclude para sniffs de PHPCompatibility en un conjunto de reglas personalizado o si usa las anotaciones en línea PHP_CodeSniffer de nuevo estilo, deberá actualizarlas al actualizar. Este debería ser un cambio único. El registro de cambios contiene información detallada sobre todos los cambios de nombre de sniff.
Lea atentamente el registro de cambios de la versión 9.0.0 antes de actualizar.
require-dev de su archivo composer.json . "require-dev" : {
"phpcompatibility/php-compatibility" : " * "
},
"prefer-stable" : true Si PHPCompatibility es el único estándar PHP CodeSniffer externo que utiliza, puede agregar lo siguiente a su archivo composer.json para ejecutar automáticamente el comando necesario:
"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, y muy recomendable si usa más de un estándar PHP CodeSniffer externo, puede usar cualquiera de los siguientes complementos de Composer para manejar esto por usted.
Simplemente agregue el complemento Composer que prefiera a la sección require-dev de su archivo composer.json .
Como última alternativa, en caso de que utilice un conjunto de reglas personalizado, puede indicarle a PHP CodeSniffer la ruta al estándar PHPCompatibility agregando el siguiente fragmento a su conjunto de reglas personalizado:
< config name = " installed_paths " value = " vendor/phpcompatibility/php-compatibility " />composer update --lock para instalar PHP CodeSniffer, el estándar de codificación PHPCompatibility y, opcionalmente, el complemento Composer../vendor/bin/phpcs -i en la línea de comando. PHPCompatibility debe figurar como uno de los estándares disponibles../vendor/bin/phpcs -p . --standard=PHPCompatibilityInstale PHP CodeSniffer mediante su método preferido.
PHP CodeSniffer ofrece una variedad de métodos de instalación que se adaptan a su flujo de trabajo: Composer, PEAR, un archivo Phar, archivos de lanzamiento comprimidos/alquitranados o verificar el repositorio usando Git.
Consejo profesional: registre la ruta a PHPCS en la variable de entorno $PATH de su sistema para que el comando phpcs esté disponible desde cualquier lugar de su sistema de archivos.
Descargue la última versión de PHPCompatibility y descomprímala/descomprímala en un directorio arbitrario.
También puedes optar por clonar el repositorio usando git para actualizar fácilmente tu instalación con regularidad.
Agregue la ruta al directorio en el que colocó su copia del repositorio PHPCompatibility a la configuración de PHP CodeSniffer usando el siguiente comando desde la línea de comando:
phpcs --config-set installed_paths /path/to/PHPCompatibility Es decir, si colocó el repositorio PHPCompatibility en el directorio /my/custom/standards/PHPCompatibility , deberá agregar ese directorio a la variable de configuración PHP CodeSniffer installed_paths .
Advertencia :installed_paths sobrescribe cualquier installed_paths configurado previamente. Si previamente configuró installed_paths para otros estándares externos, ejecute phpcs --config-show primero y luego ejecute el comando installed_paths con todas las rutas que necesita separadas por comas, es decir:
phpcs --config-set installed_paths /path/1,/path/2,/path/3Consejo profesional: alternativamente, en caso de que utilice un conjunto de reglas personalizado, puede indicarle a PHP CodeSniffer la ruta al estándar PHPCompatibility agregando el siguiente fragmento a su conjunto de reglas personalizado:
< config name = " installed_paths " value = " /path/to/PHPCompatibility " /> Verifique que el estándar PHPCompatibility esté registrado correctamente ejecutando phpcs -i en la línea de comando. PHPCompatibility debe figurar como uno de los estándares disponibles.
Ahora puedes usar el siguiente comando para inspeccionar tu código:
phpcs -p . --standard=PHPCompatibilityphpcs -p . --standard=PHPCompatibility .testVersion con la que comparar. Esto permitirá realizar comprobaciones de funciones PHP obsoletas o eliminadas, así como la detección de código utilizando nuevas funciones PHP.--runtime-set testVersion 5.5 a su comando de línea de comando.--runtime-set testVersion 5.3-5.5 .--runtime-set testVersion 7.0- para ejecutar todas las comprobaciones para PHP 7.0 y superiores.--report-full=path/to/report-file . Para obtener más información y otras opciones de informes, consulte la wiki de PHP CodeSniffer.A mediados de 2018, está disponible un conjunto limitado de conjuntos de reglas específicas de framework/CMS. Estos conjuntos de reglas están alojados en sus propios repositorios.
PHPCompatibilityJoomla GitHub | empaquetadorPHPCompatibilityWP GitHub | empaquetadorDesde el otoño de 2018, también hay disponibles varios conjuntos de reglas específicas de PHP polyfill:
PHPCompatibilityPasswordCompat GitHub | Packagist: cuentas para la biblioteca de polyfill password_compat de @ircmaxell.PHPCompatibilityParagonie GitHub | Packagist: contiene dos conjuntos de reglas que representan las bibliotecas polyfill Paragonie random_compat y sodium_compat respectivamente.PHPCompatibilitySymfony GitHub | Packagist: contiene una serie de conjuntos de reglas que representan varias bibliotecas PHP polyfill ofrecidas por el proyecto Symfony. Para obtener más detalles sobre los conjuntos de reglas disponibles, consulte el archivo README del repositorio PHPCompatibilitySymfony. Si desea asegurarse de tener todos los conjuntos de reglas PHPCompatibility disponibles en cualquier momento, puede usar el paquete PHPCompatibilityAll GitHub | Empaquetador.
IMPORTANTE: Los conjuntos de reglas específicos de Framework/CMS/Polyfill no establecen la versión mínima de PHP para su proyecto, por lo que aún deberá pasar una testVersion para obtener los resultados más precisos.
Al igual que con cualquier estándar PHP CodeSniffer, puede agregar PHPCompatibility a un conjunto de reglas 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 > También puede configurar testVersion desde dentro del conjunto de reglas:
<!-- Check for cross-version support for PHP 5.6 and higher. -->
< config name = " testVersion " value = " 5.6- " />Por supuesto, también se admiten otras opciones avanzadas, como cambiar el tipo de mensaje o la gravedad de los rastreos seleccionados, como se describe en la página wiki del conjunto de reglas anotadas de PHPCS.
testVersion en el conjunto de reglas frente a la línea de comandos En PHPCS 3.2.0 y versiones anteriores, una vez que configuraste testVersion en el conjunto de reglas, ya no podías anularlo desde la línea de comandos. A partir de PHPCS 3.3.0, una testVersion configurada mediante la línea de comandos anulará la testVersion en el conjunto de reglas.
Esto permite una mayor flexibilidad cuando, por ejemplo, su proyecto necesita cumplir con PHP 5.5- , pero tiene un archivo de arranque que debe ser compatible con PHP 5.2- .
En este momento, hay dos sniffs que tienen una propiedad que se puede configurar mediante el conjunto de reglas. Es posible que haya más propiedades personalizadas disponibles en el futuro.
El sniff PHPCompatibility.Extensions.RemovedExtensions busca extensiones eliminadas según el prefijo de función utilizado para estas extensiones. Esto podría entrar en conflicto con las funciones del área de usuario que utilizan el mismo prefijo de función.
Para incluir funciones en el área de usuario en la lista blanca, puede pasar una lista de nombres de funciones delimitadas por comas al 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 > El sniff PHPCompatibility.Interfaces.RemovedSerializable necesita conocer todas las interfaces que amplían la interfaz Serializable para proporcionar los resultados más confiables. El sniff avisará cuando encuentre una interfaz que extienda la interfaz Serializable que el sniff desconoce y recomendará que se agregue el nombre de la interfaz a la propiedad.
Para informar al sniff sobre interfaces adicionales que proporcionan la interfaz serializable, agregue un fragmento como el siguiente a su conjunto de reglas personalizado:
< rule ref = " PHPCompatibility.Interfaces.RemovedSerializable " >
< properties >
< property name = " serializableInterfaces " type = " array " >
< element value = " MyCustomSerializableInterface " />
< element value = " AnotherSerializableInterface " />
</ property >
</ properties >
</ rule >Hay cientos de proyectos públicos que utilizan PHPCompatibility o se extienden sobre él. Una breve lista de algunos que quizás conozcas o eches un vistazo:
Las contribuciones son muy bienvenidas. Lea la documentación de CONTRIBUCIÓN para comenzar.
Este código se publica bajo la Licencia pública general reducida (LGPL) de GNU. Para obtener más información, visite http://www.gnu.org/copyleft/lesser.html