php dynamic typing

php - ¿Qué es la escritura dinámica?



dynamic typing (1)

Escuché que este término se usa con lenguajes de scripting como PHP. ¿Qué significa exactamente?


La tipificación dinámica es una característica definitiva de un idioma. Una breve explicación podría ser:

Un lenguaje tiene tipado dinámico cuando no asocia valores estrictamente con un tipo específico, pero está diseñado para "decidir" cuál debe ser el tipo de valor en tiempo de ejecución, según cómo se intenta usarlo.

Por ejemplo, en PHP puedes escribir

$count = "5"; // defines a string variable

y luego continúa diciendo

$count = $count * 2; // this is legal and has the obvious result¹

¿Lo que pasó aquí? Por un lado, el compilador no se quejó de que está intentando multiplicar una cadena por un número y se niega a compilar el programa (como sucedería en lenguajes como C, C ++, C # y Java). Produjo código para enviar los argumentos $count y 2 al operador de multiplicación tal como lo pidió y lo siguió.

Con el programa ahora compilado, la escritura dinámica entra en vigencia en el tiempo de ejecución . Cuando el operador de multiplicación se desplaza para ver sus operandos, comprueba para ver cuál es el tipo actual, si se quiere, de cada uno. Como antes, es una cadena y un int. Pero el operador sabe que solo puede multiplicar dos enteros (ignoremos los flotantes por simplicidad), por lo que tiene que producir de algún modo un valor entero a partir de la cadena. Todos los lenguajes de tipado dinámico tienen reglas que estipulan cómo funciona una conversión entre todos los pares de tipos de valores; en este caso, PHP produce el número entero 5 a partir de la cadena "5".

Otro aspecto del tipado dinámico que puedes encontrar se llama tipado de patos ; esto solo se aplica a los valores de los tipos de clase (es decir, no primitivos). En resumen, la tipificación de pato estipula que cuando escribes

$object->quack();

el compilador no intentará ver si $object es de un tipo que tiene un método llamado quack que no toma argumentos. Más bien, intentará en tiempo de ejecución para ver si $object realmente tiene dicho método; si lo hace, se llamará al método independientemente del tipo de objeto que tenemos a mano (podría ser un pato, podría ser un perro para todos los problemas del compilador).

Notas al pie:

¹ Multiplicar una cadena por un entero es de lo que trata la tipificación dinámica (producir un número entero a partir de una cadena porque la multiplicación lo exige); sin embargo, también hay tipas sueltas en el trabajo aquí (lo que permite que la multiplicación compile sin poder probar que ambos operandos son en realidad).