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=PHPCompatibility
Instale 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/3
Consejo 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=PHPCompatibility
phpcs -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