Foto de ???? ??? en Unsplash
Algunos consideran que las sugerencias de tipo son el santo grial de las funciones. Uno que todos los lenguajes de programación deben tener. PHP durante mucho tiempo no tuvo dicho sistema, pero ahora ha sido adoptado ampliamente por la mayoría de los desarrolladores.
Dicho esto, el sistema de tipos de PHP no llega tan lejos como el de otros lenguajes. Muchos implementan lo que se conoce como Genéricos. Esta es la capacidad de imponer un tipo entre estructuras y colecciones. Por ejemplo, en Java podemos especificar que los Arrays solo deben contener elementos de un determinado tipo, por ejemplo, un Array of Strings.
Tal vez algún día también tengamos esta funcionalidad en PHP, pero hasta entonces podemos resolver esto con algunas técnicas diferentes. A falta de una mejor descripción, me refiero a estos como sugerencias de tipo suave y sugerencias de tiempo de ejecución.
Las primeras y más obvias sugerencias de tipo son las que se introdujeron en PHP 7 y todavía se están agregando a PHP. Las constantes con sugerencias de tipo solo se agregaron en PHP 8.3.
Las sugerencias de tipo son útiles para ayudar a transmitir lo que se debe pasar a un método o función como parámetro o lo que devolverá ese método. Las sugerencias de tipo afectarán las firmas de cualquier clase con la que las usen, ya que extender una clase con sugerencias de tipo ya establecidas significará que no se pueden anular.
Un ejemplo de una clase que hace uso completo de los tipos sería:
Por supuesto, existen limitaciones en nuestras sugerencias de tipo porque, como se mencionó anteriormente, no podemos conformar una matriz para que sea del mismo tipo y en su lugar solo debemos usar array . Tampoco podemos limitar los números a ser solo positivos o estar dentro de un rango determinado.
Otro puede ser Cierres, ya que no hay forma de describir funciones anónimas dentro de los tipos nativos de PHP. En su lugar, debemos usar \Closure o callable . A menudo, tampoco se permite utilizar callable como tipo.
Afortunadamente, todavía hay una manera de describir estos escenarios más complicados con sugerencias tipográficas.
Sugerencias de tipo suave
Nuestros siguientes tipos de sugerencias de tipo se proporcionan a través de PHPDocs. Mientras que los tipos nativos generarán excepciones durante el tiempo de ejecución si se pasa un método o devuelve el tipo incorrecto, las sugerencias de tipo PHPDoc no tienen ningún efecto en el tiempo de ejecución de la aplicación.
En cambio, las sugerencias de tipo suave nos ayudan únicamente cuando usamos un IDE como VS Code o PHPStorm, que detectará esos tipos por nosotros. El otro caso de uso es con herramientas de análisis estático como PHPStan y posteriormente Rector.
La mayor ventaja de usar tipos suaves es que le permite describir con más precisión el tipo de cualquier parámetro, propiedad, etc. Por ejemplo, podemos tomar la clase anterior y hacer que sea más fácil entender las matrices o cierres utilizados. .
La mejor manera de asegurarse de que todo el uso de tipos sea correcto es instalar PHPStan. A partir de ahí, probablemente necesitarás usar al menos el nivel 5. Esto luego se puede aplicar mediante pasos de integración continua que verifican que las sugerencias de tipo sean correctas.
En realidad, hay una lista que puedes usar si quieres usar la sugerencia de tipo suave correcta. Aún mejor, hay una herramienta PHPStan que puedes usar para probar si todo el tipo que indica es correcto según PHPStan si no estás seguro y quieres ejecutar una prueba rápida.
Consejos de tiempo de ejecución
Nuestra siguiente forma de admitir tipos es utilizar sugerencias de tiempo de ejecución. Lo que esto realmente significa es ejecutar nuestro propio código para verificar los tipos a partir de los parámetros. Por ejemplo, podemos comprobar si una matriz sólo contiene un tipo particular de objeto. Si no es así, lanzamos una InvalidArgumentException.
Por cierto, esta técnica a veces se denomina programación defensiva. Mirando el ejemplo de código, esto es bastante engorroso. Es mucho código simplemente para verificar si una matriz es correcta. Es por eso que a menudo recurrimos a una biblioteca, en este caso webmozart/assert .
composer require webmozart/assertAhora, con este paquete instalado, podemos reducirlo a una simple línea.
Una de las mejores cosas de esta biblioteca es que si agregas la extensión Assert a PHPStan, esto ayudará a tu cobertura de tipos cuando se analice el código.
Conclusión
En conclusión, dominar las sugerencias de tipos en PHP es una habilidad esencial para los desarrolladores que buscan escribir código limpio, fácil de mantener y confiable. Si bien el sistema de tipos de PHP todavía carece de algunas características que se encuentran en otros lenguajes, como los genéricos, existen múltiples estrategias disponibles para imponer una escritura más estricta, ya sea a través de sugerencias de tipos nativos, anotaciones PHPDoc o comprobaciones de tiempo de ejecución. Aprovechar herramientas como PHPStan y bibliotecas como Assert puede ayudarle a garantizar la seguridad de tipos, incluso en escenarios complejos. Al integrar estas técnicas en su flujo de trabajo de desarrollo, estará mejor equipado para manejar la naturaleza dinámica de PHP con confianza y precisión.
Soy Peter Fox, un desarrollador de software en el Reino Unido que trabaja con Laravel. Gracias por leer mi artículo, tengo muchos más para leer en https://articles.peterfox.me. Ahora también soy patrocinador en GitHub. Si desea animarme a escribir más artículos como este, considere realizar una pequeña donación única.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3