Después de seis años de desarrollo, se lanzó la primera versión estable del analizador estático PHPStan 1.0, que permite encontrar errores en el código en PHP sin necesidad de ejecutarlo ni usar pruebas unitarias. El código del proyecto está escrito en PHP y se distribuye bajo la licencia MIT.
El analizador ofrece 10 niveles de revisión, donde cada nivel siguiente amplía las capacidades del anterior y proporciona verificaciones más estrictas:
Ejemplos de problemas básicos detectados:
- Existencia de clases utilizadas en instanceof, catch, typehints y otras construcciones del lenguaje.
- Existencia y accesibilidad de métodos y funciones llamados, así como el número de argumentos transmitidos.
- Verificación de que el método devuelve datos del mismo tipo que se definió en la expresión return.
- Existencia y visibilidad de las propiedades a las que se accede, así como verificación de los tipos de datos declarados y reales utilizados en las propiedades.
- Correcta cantidad de parámetros pasados a las llamadas sprintf/printf en el bloque de formato de cadenas.
- Existencia de variables considerando los bloques formados por operadores de ramificación y bucles.
- Las conversiones de tipo inútiles (por ejemplo, «(string) ‘foo’») y las comprobaciones estrictas («===» y «!==») de datos con diferentes tipos y operandos, que siempre devuelven un valor false.
Novedades clave de PHPStan 1.0:
- Se ha implementado el nivel de comprobación «9», que realiza verificaciones sobre el uso del tipo «mixed», destinado a permitir que una función acepte parámetros de diferentes tipos. El noveno nivel identifica prácticas inseguras en el uso de «mixed», como pasar valores con el tipo «mixed» a otro tipo, llamar a métodos de tipo «mixed» y acceder a sus propiedades, ya que podrían no existir.
- Gestión de la verificación de la identidad de los valores devueltos para llamadas de función idénticas utilizando las anotaciones @phpstan-pure y @phpstan-impure.
- Análisis de tipos en construcciones try-catch-finally utilizando anotaciones @throws.
- Identificación de propiedades, métodos y constantes internas (private) específicas pero no utilizadas.
- Transmisión de llamadas de callback incompatibles en funciones de manipulación de arrays, como array_map y usort.
- Inspección de tipos para anotaciones typehint que faltan.
- Se ha garantizado la compatibilidad de las descripciones de tipos con PHPDocs, lo que permite usar en PHPDocs tipos de mensajes de error.
Fuente: opennet.ru
