Strict typing in PHP se refiere a una característica del lenguaje mediante la cual se puede especificar que los tipos de datos de los valores deben coincidir exactamente con el tipo definido en las declaraciones de funciones, métodos o propiedades. Esto contrasta con la tipificación débil, donde PHP automáticamente intenta convertir los valores a los tipos necesarios, si es posible.
PHP, por defecto, es un lenguaje de tipificación débil, lo que significa que intenta convertir los valores automáticamente al tipo necesario dado el contexto. Sin embargo, con la introducción de la declaración `declare(strict_types=1);` en PHP 7, los desarrolladores tienen la opción de habilitar la tipificación estricta para archivos específicos. Esto significa que si una variable es definida como un entero `int`, se debe pasar exactamente un entero a esa declaración; de lo contrario, se lanzará un error de tipo.
Para activar la tipificación estricta en un archivo PHP, se coloca la directiva `declare(strict_types=1);` al comienzo del archivo antes de cualquier código PHP:
```
declare(strict_types=1);
function add(int $a, int $b): int {
return $a + $b;
}
echo add(1, 2); // Salida: 3
echo add(‘1’, ‘2’); // Error de tipo: Se espera int, se proporciona string
?>
```
Sin la declaración `declare(strict_types=1);`, PHP intentará convertir los valores de forma automática:
```
function multiply($a, $b) {
return $a * $b;
}
echo multiply(2, ‘3’); // Salida: 6
echo multiply(‘4’, ‘5’); // Salida: 20
```
En la ausencia de `strict_types`, las cadenas ‘3’ y ‘5’ son automáticamente convertidas a enteros, y las operaciones matemáticas se realizan con éxito.
Cuando se usa la declaración `declare(strict_types=1);`, se requiere que los tipos de datos pasados coincidan estrictamente con los tipos especificados:
```
declare(strict_types=1);
function multiply(int $a, int $b): int {
return $a * $b;
}
echo multiply(2, 3); // Salida: 6
//echo multiply(‘4’, ‘5’); // Error fatal: Argumento 1 pasado a multiply() debe ser de tipo entero
?>
```
Aquí, si se comentara el `echo multiply(‘4’, ‘5’);`, se lanzaría un error fatal debido a que ‘4’ y ‘5’ son cadenas y no coinciden con el tipo `int` declarado en la función.
La tipificación estricta puede ser muy útil para:
1. Evitar Errores de Lógica Indetectables: Problemas que podrían no manifestarse hasta que los datos de entrada erróneos se usen en la producción.
2. Mejorar la Legibilidad del Código: Deja claro cuáles son los tipos de datos esperados, lo que hace que el código sea más fácil de entender y mantener.
3. Facilitar el Mantenimiento de Codigo: Al especificar tipos explícitamente, otros desarrolladores (o el mismo desarrollador en el futuro) tendrán una comprensión más clara de cómo se debe usar una función o método.
- [PHP: Manual de PHP sobre Tipos y Pseudo-tipos – Manual](https://www.php.net/manual/es/functions.arguments.php#functions.arguments.type-declaration)
- [PHP: Tipificación Estricta – PHP: The Right Way](https://www.phptherightway.com/)
- [Introducción a la Tipificación Estricta en PHP 7 – SitePoint](https://www.sitepoint.com/php-7-strict-typing-declarations/)
Estas fuentes proporcionan una guía comprensiva y detallada sobre la implementación y los beneficios de la tipificación estricta en PHP, asegurando un desarrollo robusto y menos propenso a errores.