Home » PHP » ¿Cómo son los tipos de datos en PHP?

¿Cómo son los tipos de datos en PHP?

Los tipos de datos de PHP son pocos para mantener la simpleza del lenguaje pero ya podremos comprobar que a pesar de ser pocos no nos faltará nada en el momento de programar.
PHP no requiere la declaración explícita del tipo de dato. 
PHP simplifica al máximo la cantidad de tipos numéricos: sólo son dos. Comparados con los tipos de datos numéricos de un lenguaje como C esto puede parecer muy limitado. 
 
En primera instancia debemos decir que PHP no es un lenguaje ideal para el uso científico, si nuestras necesidades van por la exactitud y precisión de los cálculos más complejos debemos utilizar otro lenguaje. Para PHP los números son enteros o fraccionarios y si una cadena participa en un cálculo la convierte a número, todo muy simple y flexible. 
 
El tipo de datos define qué clase de datos puede contener una variable. En PHP existen estos tipos de datos:
  • Números enteros (integers): Pueden almacenar números enteros negativos y positivos.
  • Números de coma flotante (doubles): Pueden almacenar números con decimales.
  • Cadenas de caracteres (strings): Pueden almacenar cualquier carácter y su longitud no está limitada.
  • Booleanos: Pueden almacenar True (1) o False (0).
  • Matrices ( arrays): Permiten almacenar valores múltiples bajo un mismo nombre de datos y con distintos tipos de datos. Se accede utilizando un subíndice que empieza en 0.
  • Objetos: Son tipos de datos complejos que permiten almacenar información (como cualquier otro tipo de datos) y funciones para trabajar con los datos (métodos). 
  • Recursos: Son variables especiales que mantienen referencias a recursos externos a PHP (por ejemplo, una conexión a una base de datos).
  • NULL: Un tipo NULL es el tipo de una variable sin asignación.
Una variable no es de un tipo determinado durante toda la ejecución del programa, todo depende de la última asignación realizada a la variable.  

Números enteros

Para definir variables enteras positivas y negativas podemos emplear diferentes sintaxis. Es decir, una variable puede contener intrínsecamente el mismo valor pero la asignación podemos hacerla de distintas maneras. Por ejemplo, la variable $var contiene el valor decimal 20 pero la instrucción pudo haberse codificado de distintas maneras:
$var = 20; // asignación en decimal
$var = 024; // asignación en octal
$var = 0x14; // asignación en hexadecimal
Si es necesario indicar valores negativos, el signo precede a la definición del número.  
$var = -20; // asignación en decimal
$var = -024; // asignación en octal
$var = -0x14; // asignación en hexadecimal
Las tres instrucciones almacenan el mismo valor entero. En la asignación octal se indica un cero adelante y luego números entre 0 y 7. En la asignación hexadecimal se indica 0x adelante y luego números de 0 a 9 y letras de A a F (que se corresponden con los números decimales de 10 a 15).
Si en una variable entera si almacena un valor mayor al que puede soportar, la variable se convierte automáticamente a float.

Números de coma flotante

Los números de coma flotante son los que permiten almacenar una parte fraccionaria. También existen dos sintaxis: estándar y exponencial.
$var = 250.89; // asignación estándar
$var = 25089e-2; // asignación exponencial  = 250,89

Otros lenguajes tienen varios tipos numéricos con diferentes capacidades, tamaños y precisión. PHP lo simplifica todo a sólo dos tipos numéricos: con decimales o sin decimales.

Cadenas

Hasta PHP 5.3 un carácter siempre era un byte, pero en PHP 6 se incluye soporte a Unicode y los caracteres en esta codificación pueden ocupar más de un byte; no obstante, eso no genera ningún problema para el programador.
 
En las variables de tipo de cadena podemos utilizar diferentes tipos de asignaciones:
  • Cadena  definida entre comillas dobles (") 
  • Cadena definida entre comillas simples (')
  • Cadena definida por sintaxis de documento incrustado ("<<<"), denominada sintaxis heredoc. 
  • Cadena definida por sintaxis de documento incrustado ("<<<"), denominada sintaxis nowdoc. Es una variante de heredoc implementada a partir de PHP 5.3.
Las dos primeras opciones son las más comunes. La diferencia entre ambas reside en la forma que se tratan los caracteres de escape. 
$var = "cadena";
$var = 'cadena';  
$var= 'permite tener comillas dobles " interiores' ;  
$var= "permite tener comillas dobles \" interiores" ;

Si se utilizan comillas simples se pueden incluir comillas dobles dentro de la cadena (y viceversa). Como alternativa podemos utilizar a la barra invertida para definir un escape.
 
Éstos son los códigos de escape más utilizados:
  •  \f Salto de página (form feed)
  •  \n Nueva línea (line feed)
  •  \r Retorno de carro (carriage return)
  •  \t Tabulación
  •  \' Comilla simple
  •  \" Comillas dobles
  •  \$ Carácter dólar
Los escapes nos permiten incluir caracteres dentro de una cadena que de otra manera serían mal interpretados.
 
El uso de los delimitadores de comillas dobles tiene una diferencia importante con respecto a la comilla simple: cuando se utilizan comillas dobles para delimitar una cadena, PHP evalúa la cadena y verifica la existencia de variables en el interior de la cadena y reemplaza el nombre de la variable por su valor vigente. Por ejemplo:
$var = "Pepe";
echo  "mi nombre es $var";

Lo que producirá el texto: mi nombre es Pepe.
 
Cuando se define una cadena entre comillas dobles, el texto de la cadena se evalúa y si hay alguna variable PHP, esta se reemplaza por su valor.
En cambio, si cambiamos el delimitador de cadena, usando comillas simples, el resultado sería diferente y quizás no el que deseamos:
$var = "Pepe";
echo  'mi nombre es $var';

Lo que producirá el texto: mi nombre es $var.
Cuando se define una cadena entre comillas simples , el texto de la cadena no se evalúa y se imprime tal cual es.

¿Cómo evitar la evaluación de variables en una cadena?

Muchas veces resulta práctico que PHP evalúe una variable en una cadena insertada dentro de una cadena de texto, pero, ¿cómo se evita que PHP evalúe una variable que está escrita dentro de una cadena aunque se utilicen comillas dobles? 
La respuesta es: usando caracteres de escape.
$var = "Pepe";
echo "mi nombre es \$var";

Al usar el código de escape \$ PHP no evalúa la variable $var porque no la reconoce como tal y se producirá el texto: mi nombre es $var. 

Sintaxis heredoc

La tercera opción que tenemos para definir cadenas es más reciente ya que se añadió a PHP en su versión 4. Se utiliza el símbolo de documento incrustado ("<<<") y luego un identificador que se usará también para indicar la finalización del documento. El texto se trata como si fuese una cadena encerrada entre comillas dobles pero sin necesidad de las comillas. Como sucede en las cadenas encerradas entre comillas dobles, el texto de la cadena se analiza y si aparecen variables PHP se reemplazarán por su valor.
El identificador de cierre debe codificarse sólo y a partir de la columna 1, si no se cumplen estas dos condiciones, PHP seguirá buscando el cierre por toda la memoria del programa.
 
// aquí definimos xxx como el identificador del documento incrustado
// si se codifica  <<<"xxx" tiene el mismo efecto
$nombre  = "Pepe";
$var = <<<xxx
ésta es una cadena que terminará al encontrarse <BR>
el identificador que hayamos elegido, en este caso, <BR>
xxx en la última línea. $nombre
xxx;
echo $var

Esto da como resultado en el navegador:
 
ésta es una cadena que terminará al encontrarse  
el identificador que hayamos elegido, en este caso  
xxx en la última línea. Pepe

Sintaxis nowdoc

Es una variante a la opción heredoc, la diferencia es que este tipo de sintaxis se trata como una cadena encerrada entre comillas simples, esto implica que no se evalúa los nombres de variables que pueden aparecer en el texto. Esta cadena se define de la siguiente manera:
 
$nombre  = "Pepe";
$var = <<<'xxx'
ésta es una cadena que terminará al encontrarse <BR>
el identificador que hayamos elegido, en este caso, <BR>
xxx en la última línea. $nombre
xxx; 
echo $var

En este caso, el texto mostrado en el navegador será:
ésta es una cadena que terminará al encontrarse 
el identificador que hayamos elegido, en este caso, 
xxx en la última línea. $nombre

Error común: cadenas sin terminar

La asignación de una variable con un valor de cadena puede provocar errores muy extraños si nos olvidamos de cerrar adecuadamente la cadena:
print("me olvido de cerrar la cadena); 

Este error hará que el intérprete PHP busque el final de la cadena, es decir el siguiente signo " que puede estar muchas líneas de código más abajo.

Error común: escapes mal codificados

La mala codificación de un carácter de escape puede provocar errores extraños y que pueden ser difíciles de detectar, por ejemplo:
 
print("El libro se denomina /"HTML");
...

El escape está invertido (/ en lugar de \) por lo que la cadena termina antes de los previsto y el intérprete se puede encontrar con un literal que puede confundirlo aún más. 

Booleanos

Es el tipo más simple de todos: expresa un valor verdadero o false (TRUE y FALSE).
$var = TRUE;
$var2 = FALSE;

Cualquier variable numérica que no tenga el valor 0 desde el punto de vista de evaluación de una expresión booleana se considera como TRUE.  
Si se convierten variables de otros tipos a variable booleana se producen estos resultados:
  • Valor entero: Es FALSE si la variable tiene el valor 0.

  • Valor de coma flotante: Es FALSE si la variable tiene el valor 0.0.

  • Cadena: Es FALSE si es una cadena vacía, nula o con el valor "0".

  • Matriz: Es FALSE si la matriz no tiene elementos.

  • Recurso: Es TRUE si el recurso es válido.

Matrices

Una matriz es una estructura de datos que nos permite referirnos a un conjunto de datos utilizando un nombre único. Los datos almacenados en la matriz se denominan elementos de la matriz.
$matriz[0] = "Barcelona";
$matriz[1] = "Madrid";
$matriz[2] = "Valencia";

PHP no nos obliga a que los elementos de la matriz sean todos del mismo tipo. Por lo que, esto es válido:
$matriz[3] = 100;

Este ejemplo que hemos visto es una matriz indexada (el índice es numérico) cuyo primer índice es el valor 0. No existe obligación de definir valores a todos los elementos de la matriz, es decir, siguiendo con el ejemplo visto podríamos definir un valor para el índice 5  sin definir un valor para el índice 4. 
 
Si se hace esta asignación:
 
$matriz[] = 30;

El elemento que recibe el valor 30 es el último de la matriz. En nuestro ejemplo habíamos definido el valor para el índice 3, por lo que el valor 30 se asigna al índice 4. Por lo que esto sería equivalente:
$matriz[] = "Barcelona"; // la primera asignación va al índice 0
$matriz[] = "Madrid"; // índice 1
$matriz[] = "Valencia"; // índice 2
$matriz[] = 100; // índice 3
$matriz[] = 30; // índice 4

Pero también existe otro modo de matrices, las matrices asociativas, en las que el índice en lugar de ser un número es un campo de cadena. Por ejemplo:
$matrizAs["España"] = "Madrid";
$matrizAs["Italia"] = "Roma";
$matrizAs["Francia"] = "París";

Objetos

PHP nos permite definir objetos, tema que por su complejidad veremos en profundidad más adelante. Como sencilla definición se puede resumir que un objeto es una estructura de datos que contiene propiedades (lo que normalmente se considera datos) y métodos (código que nos permite manipular las propiedades del objeto). La sintaxis básica para la definición de un objeto es la siguiente:
class objprueba {
  function metodoprueba () {
  echo "el objeto hace cosas";
  }
}

$var = new objprueba; // así se define un objeto de tipo objprueba
$var->metodoprueba(); // así se llama a un método del objeto

Esto da como resultado:
el objeto hace cosas
Ésta es una simple presentación del tema de objetos y clases. En el capítulo dedicado a las clases se explicará con detalle cómo crear las propiedades y los métodos de un clase.

Recursos

Los recursos son valores especiales que hacen referencia a una información de estado o memoria que es de origen externo al propio PHP. El tipo de dato recurso se utiliza para muchos fines, en todos los casos para que PHP se comunique con algún programa externo (por ejemplo, con MySQL) que utiliza memoria del programa en respuesta al requerimiento de PHP. Normalmente, el programador PHP no se tiene que preocupar por la liberación de esa memoria ya que PHP liberará todo al finalizar la ejecución del código de la página.
 
Los recursos se crean a partir del uso de determinadas funciones que dan como valor de retorno un recurso que después se puede reutilizar para otras operaciones afines. Por ejemplo la función mysql_connect() nos devuelve un recurso cuando la conexión con la base de datos se ejecuta correctamente:
$res = mysql_connect(); 

La variable $res se puede reasignar posteriormente con otro recurso o con el valor NULL.

NULL

El valor NULL representa a una variable sin valor asignado. Una variable puede ser nula por tres razones:
  • Se le asignó en valor NULL
  • No se le asignó aún ningún valor
  • Se anuló con la función unset()
La asignación de NULL tiene esta sintaxis: 
<?php
$var = NULL; 
?> 

izq sup der

Deja un comentario