[Ir al menú de PHP]
Tipos de variables

Tipos de variables

• En PHP no es necesaria una definición previa de tipo de variabes

• Dependiendo de los valores que se les vayan asignando las variables cambian de tipo y se adaptan a los nuevos valores

• Las variables en PHP pueden ser de tres tipos:

Enteras (tipo Integer)

De coma flotante (tipo Double)

Cadenas (tipo String)

• Cuando asignamos a una variable un valor numérico comprendido entre - 231 y + 231 PHP la interpreta como tipo Integer.

• Si el valor numérico de una variable desborda el intervalo anterior -bien por asignación directa o como resultado de una operación aritmética- PHP convierte la variable automaticamente en tipo Double.

• Cualquier variable a la que se le asigne como valor una cadena de caracteres (números y/o letras encerrados por comillas) es interpretada por PHP como tipo String.

Determinación de tipos de variables

• La función gettype(variable) devuelve una cadena de caracteres con el tipo de la variable que contiene. Los valores que puede devolver son: Integer, double o string.

Forzado de tipos de variables

• PHP permite forzar los tipos de variables. Eso quiere decir que se puede obligar a PHP a que asigne un determinado tipo a una determinada variable.

• Para forzar una variable a tipo double basta con anteponer a su valor una de estas expresiones (entre paréntesis): (double), o (real) o (float).

P. ejemplo:
$a=((double)45); ó
$a=((float)45); ó
$a=((real)45);
producirían el mismo efecto: convertir la variable $a a tipo Double.

• Para forzar una variable a tipo Integer basta con anteponer a su valor una de estas expresiones (entre paréntesis): (integer), o (int).

P. ejemplo:
$b=((integer)4.5); ó
$b=((int)45);
producirían el mismo efecto: convertir la variable $b a tipo Integer.

• Para forzar una variable a tipo String basta con anteponer a su valor (entre paréntesis): (string).

P. ejemplo:
$c=((string)4.5);
convertiría la variable $c a tipo String.

La instrucción settype

Otra forma de forzado de variables es el uso de la siguiente instrucción:
settype(nombre de la variable,nuevo tipo)

• La cadena nuevo tipo puede contener uno de estos valores (siempre expresados entre comillas):'double', 'integer', o 'string' según se trate de forzar a: coma flotante, entera, o cadena. • Un ejemplo podría ser este:
settype($a,'integer') que convertiría a tipo entero la variable $a.

La función settype realiza la conversión y devuelve un valor que puede ser: true o false (1 ó 0) dependiendo de que la conversión se haya realizado con éxito o no.

Operaciones con distintos tipos de variables

PHP permite operar aritméticamente con los tres tipos de variables. En la tabla de la derecha puedes ver algunos ejemplos pero en resumen ocurre lo siguiente: ¡¡Cuidado al forzar ...!!

Fíjate el los resultados marcados en amarillo en las tablas de la derecha. ¿No ves que están mal? ¿O será que se me han cruzado los cables?

He forzado a entera una variable que está fuera del rango entero y al parecer... el PHP se ha enfadado -y con razón- pero parece tan educado que no ha dicho nada pero... ha devuelto un resultado incorrecto.

Advertid@ quedas... procura ser respetuoso con los rangos y no hagas como yo... no busques la cuadratura del círculo...



 
 


Tipos de variables

En en cuadro siguiente se resumen los tres tipos de variables que utiliza el PHP

Las variables en PHP
Tipo Ejemplo Valor máximo Valor mínimo Observaciones
Integer $a=1234 2147483647 -2147483647 Cualquier valor numérico (dentro de este intervalo) que se asigne a una variable la convertirá a este tipo
Double $a=1.23 Cualquier valor numérico decimal o entero (fuera del intervalo anterior) que se asigne a una variable la convertirá a este tipo
String $a="123" Cualquier valor entrecomillado (sean números o letras) que se asigne a una variable la convertirá a este tipo


Determinación del tipo de variable utilizada

Dado que PHP gestiona las variables de forma autómatica y modifica los tipos de acuerdo con los valores que va tomando durante la ejecución del script, se pude recurrir a la función gettype(nombre de la variable) para determinar el tipo de la variable actual.
En la tabla siguiente tienes algunos ejemplos de aplicación de esa función.


Ejemplos de determinación del tipo de una variable
Variable Sintaxis Devuelve
$a1=347echo gettype($a1)integer
$a2=2147483647echo gettype($a2)integer
$a3=-2147483647echo gettype($a3)integer
$a4=2147483648echo gettype($a4)double
$a5=3.1416echo gettype($a5)double
$a6="347"echo gettype($a6)string
$a7="3.1416"echo gettype($a7)string
$a8="Solo literal"echo gettype($a8)string
$a9="12.3 Literal con número"echo gettype($a9)string


Forzado de tipos

Aquí tienes algunos ejemplos de forzado de tipos. Te sugiero que eches un vistazo a las advertencias que he puesto al final de la página.

Forzado de tipos
Variable Sintaxis Devuelve
$a1=347echo gettype((real)$a1)double
$a2=2147483647echo gettype((double)$a2)double
$a3=-2147483647echo gettype((float)$a3)double
$a4=2147483648echo gettype((int)$a4)integer
$a5=3.1416echo gettype((integer)$a5)integer
$a6="347"echo gettype((double)$a6)double
$a7="3.1416"echo gettype((int)$a7)integer
$a7="3.1416"echo gettype((string)$a7)string
$a8="Solo literal"echo gettype((double)$a8)double
$a9="12.3 Literal con número"echo gettype((int)$a9)integer

Nuevos valores de la variable
Valor inicial Sintaxis Nuevo valor
$a1=347echo ((real)$a1)347
$a2=2147483647echo ((double)$a2)2147483647
$a3=-2147483647echo ((float)$a3)-2147483647
$a4=2147483648echo ((int)$a4)-2147483648
$a5=3.1416echo ((integer)$a5)3
$a6="347"echo ((double)$a6)347
$a7="3.1416"echo ((int)$a7)3
$a7="3.1416"echo ((string)$a7)3.1416
$a8="Solo literal"echo ((int)$a8)0
$a9="12.3 Literal con número"echo ((double)$a9)12.3
$a9="12.3 Literal con número"echo ((int)$a9)12


Forzado de tipos usando settype()

Aquí tienes algunos ejemplos de forzado de tipos utilizando esta nueva instrucción. Te sigo sugiriendo que eches un vistazo a las advertencias que he puesto al final de la página, pero... eso es cosa tuya....

Forzado de tipos con settype()
Variable Sintaxis Devuelve
$a1=347echo (settype($a1,'double')1
 echo gettype($a1)double
  echo $a1347
$a2=2147483647echo (settype($a2,'double')1
 echo gettype($a2)double
  echo $a22147483647
$a3=-2147483647echo settype($a3,'double')1
 echo gettype($a3)double
  echo $a3-2147483647
$a4=2147483648echo settype($a4,'integer')1
 echo gettype($a4)integer
  echo $a4-2147483648
$a5=3.1416echo settype($a5,'integer')1
 echo gettype($a5)integer
  echo $a53
$a6="347"echo settype($a6,'double')1
 echo gettype($a6)double
  echo $a6347
$a7="3.1416"echo settype($a7,'integer')1
 echo gettype($a7)integer
  echo $a13
$a8="Solo literal"echo settype($a8,'double')1
 echo gettype($a8)double
  echo $a80
$a9="12.3 Literal con número"echo settype($a9,'integer')1
 echo gettype($a9)integer
  echo $a912


Operando ...que es gerundio...

Unos ejemplos de operaciones con variables de distintos tipos me han resultado muy instructivos... quizá tu no los necesites... pero a pesar de todo... aqui los tienes...


Resultados de operaciones y tipos de variables resultantes
Valores Tipos de variables
A B A+B A B A+B
121628integerintegerinteger
1221474836472147483659integerintegerdouble
-12-2147483640-2147483652integerintegerdouble
121.245613.2456integerdoubledouble
1.24561213.2456doubleintegerdouble
1.2456123.4567124.7023doubledoubledouble
12abc12integerstringinteger
1.2456abc1.2456doublestringdouble
1212abc24integerstringinteger
1212.34567abc24.34567integerstringdouble
1.245612.34567abc13.59127doublestringdouble
1.245612.3e2abc1231.2456doublestringdouble
abc12abc12stringstringinteger
abc12.34567abc12.34567stringstringdouble
12abc12.34567abc24.34567stringstringdouble


¡¡Ojo al parche...!!

¡¡Observa la operación marcada en amarillo en este último cuadro!!. He sumado dos números negativos y me salido... positivo. ¿Si sabes como lograr que eso mismo ocurra en mi cuenta bancaria... no dejes de avisarme?

Por lo que se ese problemilla se plantea cuando se trabaja con valores negativos muy próximos al extremo inferior del rango de la variable entera.

Me picó la curiosidad y pregunté al webmaster de PHP y me ha contestado esto:

«These math functions will only handle values within the range of the long and double types on your computer. If you need to handle bigger numbers, take a look at the arbitrary precision math functions.»

Como mi inglés... (uffffffffff mi inglés...) no es precisamente de Cambridge recurrí a una página gües que hace traducciones online y esto es lo que me devolvió (erratas incluidas):

«Estas funciones de la matemáticas manejarán solamente valores dentro del rango de los tipos largos y dobles en su ordenador. Si usted necesita manejar números más grandes, heche una ojeada las funciones arbitrarias de la matemáticas de la precisión»


Sugerir a un/a amig@ Envíame tus comentarios
Anterior
Indice
Siguiente