Tipos de variables

Tipos de variables básicos

Los tipos de variables básicos son los siguientes:

Existen además los tipos:

Variables lógicas (boolean)

Las variables de tipo lógico sólo pueden tener el valor true (verdadero) o false (falso). Se suelen utilizar en las estructuras de control.

Nota: El ejemplo siguiente utiliza la estructura de selección if que se explica en detalle en la lección de estructuras de control. Para entender este ejemplo, es suficiente saber que if significa si (si como condición, no sí como afirmación) y va seguida de una comparación de igualdad == (las comparaciones se explican en la lección de operaciones lógicas). En caso de que la comparación sea cierta, es decir si los dos términos a ambos lados de la comparación son iguales, se ejecuta la instrucción entre corchetes { }.

<?php
$autorizado = true;

if ($autorizado == true) {
    print "<p>Usted está autorizado.</p>\n";
}

if ($autorizado == false) {
    print "<p>Usted no está autorizado.</p>\n";
}
?>
<p>Usted está autorizado.</p>

Estos valores se pueden escribir en mayúsculas o minúsculas o combinando ambas, aunque se recomienda utilizar minúsculas:

Desaconsejado
<?php
$autorizado = fAlSe;

if ($autorizado == TRUe) {
    print "<p>Usted está autorizado.</p>\n";
}

if ($autorizado == FaLsE) {
    print "<p>Usted no está autorizado.</p>\n";
}
?>
<p>Usted no está autorizado.</p>

Nota: No es necesario comparar una variable lógica con true o false, podemos emplear variables lógicas directamente en la condición del if.

<?php
$autorizado = true;

if ($autorizado) {           // equivale a $autorizado == true
    print "<p>Usted está autorizado.</p>\n";
}

if (!$autorizado) {          // equivale a $autorizado == false
    print "<p>Usted no está autorizado.</p>\n";
}
?>
<p>Usted está autorizado.</p>
<?php
$autorizado = false;

if ($autorizado) {           // equivale a $autorizado == true
    print "<p>Usted está autorizado.</p>\n";
}

if (!$autorizado) {          // equivale a $autorizado == false
    print "<p>Usted no está autorizado.</p>\n";
}
?>
<p>Usted no está autorizado.</p>

Variables enteras (integer)

Las variables de tipo entero pueden guardar números enteros (positivos o negativos).

<?php
$lado = 14;
$area = $lado * $lado;

print "<p>Un cuadrado de lado $lado cm \ntiene un área de $area cm<sup>2</sup>.</p>\n";
?>
<p>Un cuadrado de lado 14 cm
tiene un área de 196 cm<sup>2</sup>.</p>

Las variables enteras se guardan en la memoria del ordenador utilizando un número de bytes fijo, por lo que no se pueden guardar números arbitrariamente grandes o pequeños. Ese número de bytes depende de la arquitectura del procesador (32 o 64 bits), del sistema operativo y de la versión de PHP, pero se puede averiguar mediante la constante predefinida PHP_INT_SIZE). El valor más grande que se puede almacenar se puede averiguar mediante la constante predefinida PHP_INT_MAX.

Si el resultado de un cálculo con números enteros es demasiado grande para poderse representar con un entero, PHP lo convierte automáticamente en decimal, perdiéndose precisión.


Desde PHP 7.4 (publicado en noviembre de 2019), PHP permite utilizar el carácter subrayado (_) al escribir números. Este carácter no cambia el valor del número y no aparece al imprimir los valores, pero se suele utilizar para facilitar la legibilidad del código fuente en el caso de números con muchas cifras, por ejemplo como separador de miles, millones, etc.

<?php
$x = 123_456;
$y = 123_456.789_012;
print "<p>$x $y</p>\n";
?>
<p>123456 123456.789012</p>

Números enteros en notación exponencial, hexadecimal, octal o binaria

PHP permite expresar los números enteros en notación exponencial, hexadecimal, binaria o octal.

PHP permite hacer operaciones con números en cualquier notación (cada número puede estar en una notación distinta), aunque los resultados se expresan en notación decimal.

Variables decimales (float)

Las variables de tipo decimal (float) pueden guardar números decimales (positivos o negativos). Como en las calculadoras, el separador de la parte entera y la parte decimal es el punto (.), no la coma (,)..

<?php
$lado = 14.5;
$area = $lado * $lado;

print "<p>Un cuadrado de lado $lado cm \ntiene un área de $area cm<sup>2</sup>.</p>\n";
?>
<p>Un cuadrado de lado 14.5 cm
tiene un área de 210.25 cm<sup>2</sup>.</p>

Si un número se escribe con punto pero sin parte decimal, PHP lo considera decimal.

<?php
$numero = 3.;
var_dump($numero);
?>
float(3)

Las variables decimales se guardan en todas las versiones de PHP mediante el formato IEEE 754 64 bits, por lo que el valor máximo que se puede guardar u obtener mediante un cálculo es 1.7976931348623E+308.

Si se intenta guardar un número demasiado grande positivo (tanto si ese valor se obtiene en un cálculo o si se escribe directamente) PHP no puede manejarlo y lo que hace es sustituirlo por la constante predefinida INF.

<?php
$maximo = 10 ** 308;  // 10^308
print "<p>10<sup>308</sup> se puede guardar en una variable decimal: $maximo</p>\n";
print "\n";
$demasiado = 10 * $maximo;
print "<p>Si se intenta guardar 10<sup>309</sup>, el resultado es $demasiado</p>\n";
?>
<p>10<sup>308</sup> se puede guardar en una variable decimal: 1.0E+308</p>

<p>Si se intenta guardar 10<sup>309</sup>, el resultado es INF</p>
<?php
$prueba = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;
print "<p>Si se intenta guardar 10<sup>309</sup>, el resultado es $prueba\n";
?>

<p>Si se intenta guardar 10<sup>309</sup>, el resultado es INF</p>


Números decimales en notación exponencial

PHP permite expresar los números decimales en notación exponencial. El formato de los números es mantisaeexponente que representa el número mantisa * 10exponente. La mantisa puede ser entera o decimal y normalmente es un valor entre 1 y 10, pero el exponente debe ser entero, positivo o negativo. Así,

Variables de cadenas (string)

Las variables de tipo cadena pueden guardar caracteres.

PHP no impone ningún límite al tamaño de las cadenas. Las cadenas pueden ser todo lo largas que permita la memoria del servidor.

El juego de caracteres que utiliza PHP viene determinado en principio por el juego de caracteres que utiliza el fichero fuente del programa. Pero hay que tener en cuenta que las funciones de tratamiento de cadenas no están preparadas para tratar la diversidad de juegos de caracteres: muchas suponen que cada carácter ocupa solamente un byte, otras suponen un juego de caracteres determinado (UTF-8, por ejemplo), otras utilizan el juego de caracteres definido localmente, etc.

Se puede acceder a caracteres individuales indicando la posición del carácter, como si se tratara de una matriz de una dimensión en la que el primer carácter ocupa la posición 0.

<?php
$saludo = "Hola, Don Pepito";
print "<p>$saludo</p>\n";

$saludo[0] = "M";
print "<p>$saludo</p>\n";

$saludo[14] = "n";
print "<p>$saludo</p>\n";
?>
<p>Hola, Don Pepito</p>
<p>Mola, Don Pepito</p>
<p>Mola, Don Pepino</p>

Si se indica una posición mayor que la longitud de la cadena, la cadena se alarga con espacios hasta llegar a ese valor:

<?php
$saludo = "Hola, Don Pepito";
print "<p>$saludo</p>\n";

$saludo[16] = "n";
print "<p>$saludo</p>\n";

$saludo[25] = "!";
print "<pre>$saludo</pre>\n";
?>
<p>Hola, Don Pepito</p>
<p>Hola, Don Pepiton</p>
<pre>Hola, Don Pepiton        !</pre>

Si en una posición se guarda una cadena vacía, la cadena se acorta eliminando el carácter de esa posición

<?php
$saludo = "Hola, Don Pepito";
print "<p>$saludo</p>\n";

$saludo[4] = "";
print "<p>$saludo</p>\n";
?>
<p>Hola, Don Pepito</p>
<p>Hola Don Pepito</p>

Matrices (arrays)

Las matrices se tratan en la lección Matrices.

Conversiones de tipos

PHP permite convertir variables de un tipo en otro tipo o considerar variables de un tipo como otro.

Variables como variables lógicas

Si una variable entera o decimal cuyo valor sea igual a cero se considera como variable lógica, se considera que tiene el valor false. Si una variable entera o decimal distinta de cero se considera como variable lógica, se considera que tiene el valor true.

<?php
$autorizado = 5;

if ($autorizado == true) {
    print "<p>Usted está autorizado.</p>\n";
}

if ($autorizado == false) {
    print "<p>Usted no está autorizado.</p>\n";
}
?>
<p>Usted está autorizado.</p>
<?php
$autorizado = 0.0;

if ($autorizado == true) {
    print "<p>Usted está autorizado.</p>\n";
}

if ($autorizado == false) {
    print "<p>Usted no está autorizado.</p>\n";
}
?>
<p>Usted no está autorizado.</p>

Si una cadena vacía se considera como variable lógica, se considera que tiene el valor false. Si una cadena no vacía se considera como variable lógica, se considera que tiene el valor true.

<?php
$autorizado = "a ver qué pasa";

if ($autorizado == true) {
    print "<p>Usted está autorizado.</p>\n";
}

if ($autorizado == false) {
    print "<p>Usted no está autorizado.</p>\n";
}
?>
<p>Usted está autorizado.</p>
<?php
$autorizado = "";

if ($autorizado == true) {
    print "<p>Usted está autorizado.</p>\n";
}

if ($autorizado == false) {
    print "<p>Usted no está autorizado.</p>\n";
}
?>
<p>Usted no está autorizado.</p>

Las cadenas no vacías se consideran como true, aunque tengan un valor que puedan confundirnos:

<?php
$autorizado = "NO";

if ($autorizado == true) {
    print "<p>Usted está autorizado.</p>\n";
}

if ($autorizado == false) {
    print "<p>Usted no está autorizado.</p>\n";
}
?>
<p>Usted está autorizado.</p>
<?php
$autorizado = "false";

if ($autorizado == true) {
    print "<p>Usted está autorizado.</p>\n";
}

if ($autorizado == false) {
    print "<p>Usted no está autorizado.</p>\n";
}
?>
<p>Usted está autorizado.</p>

Las matrices se consideran siempre como true:

<?php
$autorizado["nombre"] = "Pepe";

if ($autorizado == true) {
    print "<p>Usted está autorizado.</p>\n";
}

if ($autorizado == false) {
    print "<p>Usted no está autorizado.</p>\n";
}
?>
<p>Usted está autorizado.</p>
<?php
$autorizado{"nombre"] = "";

if ($autorizado == true) {
    print "<p>Usted está autorizado.</p>\n";
}

if ($autorizado == false) {
    print "<p>Usted no está autorizado.</p>\n";
}
?>
<p>Usted está autorizado.</p>