Variables

¿Qué es una variable?

En los lenguajes de programación, una variable es un elemento que permite almacenar información. Las variables se identifican por su nombre. Para facilitar la comprensión del programa, se aconseja que los nombres de las variables hagan referencia a la información que contienen. Por ejemplo, si se va a guardar en una variable la edad del usuario, un nombre adecuado de la variable sería por ejemplo $edad.

En PHP el programador puede dar el nombre que quiera a las variables, con algunas restricciones:

<?php
// Ejemplos de nombres de variables (algunos de ellos no recomendados):
$edad   = 16;
$_edad  = 17;
$Edad   = 18;
$__edad = 19;
$EDAD   = 20;
$_EDAD  = 21;
$edad1  = 22;
$edad_1 = 23;
?>

Los nombres de variables pueden contener caracteres no ingleses (vocales acentuadas, eñes (ñ) o cedillas (ç), etc.) pero se aconseja no hacerlo. Si los programas que escribimos los van a leer solamente programadores de países en los que también se utilizan esos caracteres, no habrá inconveniente, pero si colaboran con nosotros programadores de países en los que esos caracteres no se utilizan, les resultarán incómodo editar los programas. De hecho, algunos aconsejan incluso utilizar términos ingleses en los nombres de variables para facilitar la colaboración entre programadores de distintos países.

En los nombres de las variables, PHP distingue entre mayúsculas y minúsculas, es decir, si se cambia algún carácter de mayúscula a minúscula o viceversa, para PHP se tratará de variables distintas.

Si el nombre de la variable contiene varias palabras, se aconseja utilizar la notación "camel case", es decir, escribir la primera palabra en minúsculas y la primera letra de las siguientes palabras en mayúsculas.

<?php
// Ejemplos de nombres de variables Camel Case:
$edadHijo          = 16;       // edad del hijo
$edadMadre         = 47;       // edad de la madre
$edadPadre         = 46;       // edad del padre
$edadAbueloPaterno = 73;       // edad del abuelo paterno
?>

PHP define automáticamente una serie de variables (son las llamadas variables predefinidas). Los nombres de estas variables siguen siempre el mismo patrón: empiezan por un guión bajo y se escriben en mayúsculas (por ejemplo, $_REQUEST, $_SERVER, $_SESSION, etc.). Para evitar conflictos con variables predefinidas que se creen en el futuro, se recomienda no crear en los programas variables con nombres que sigan ese mismo patrón.

Usar variables

Para guardar un valor en una variable se utiliza el operador de asignación (=) escribiendo a la izquierda únicamente el nombre de la variable y a la derecha el valor que queremos guardar. Si queremos guardar un número, no hace falta poner comillas, pero si queremos guardar una cadena de texto hay que poner comillas (dobles o simples).

<?php
$edad = 15;                // La variable $edad tiene ahora el valor 15
$nombre = "Pepito Conejo"  // La variable $nombre tiene ahora el valor Pepito Conejo
?>

El programa anterior es correcto, aunque no produciría ningún resultado visible para el usuario.


En el lado izquierdo de la asignación (=) no se puede escribir más que el nombre de una variable. El programa siguiente no es sintácticamente correcto por lo que no se ejecutará y PHP mostrará un mensaje de error.

Incorrecto
<?php
$edad + 1 = 16;
print $edad;
?>
Parse error: syntax error, unexpected '=' in ejemplo.php on line 2

Una vez se ha guardado un valor en una variable, se puede utilizar en el resto del programa.

<?php
$edad = 15;
print $edad;
?>
15

A lo largo de un programa una variable puede guardar diferentes valores.

<?php
$edad = 15;
print $edad;
print "\n";
$edad = 20;
print $edad;
?>
15 20

En la parte derecha de la asignación se pueden escribir expresiones matemáticas:

<?php
$radio = 15;
$perimetro = 2 * 3.14 * 15;
print $perimetro;
?>
94.2

Esas expresiones pueden contener variables:

<?php
$radio = 15;
$perimetro = 2 * 3.14 * $radio;
print $perimetro;
?>
94.2

En PHP una igualdad no es una ecuación matemática, sino una asignación (el resultado de la derecha se almacena en la variable de la izquierda). Por ello, una asignación pueden utilizar en el lado derecho la variable en la que se va a guardar el resultado:

<?php
$edad = 15;
$edad = 2 * $edad;
print $edad;
?>
30

Lo que hace el ordenador es calcular el resultado de la expresión de la derecha utilizando el valor actual de la variable y finalmente guardar el resultado en la variable.


En los nombres de las variables, PHP distingue entre mayúsculas y minúsculas, es decir, si se cambia algún carácter de mayúscula a minúscula o viceversa, para PHP se tratará de variables distintas.

<?php
$Edad = 15;
$edad = 20;
print $Edad;
?>
15

Una variable pueda tomar valores de tipos distintos a lo largo de un programa.

<?php
$edad = 15;
print $edad;
print "\n";
$edad = "quince";
print $edad;
?>
15 quince

Concatenar variables y cadenas

El operador . (punto) permite concatenar dos o más cadenas o variables.

<?php
$cadena1 = "Pasa";
$cadena2 = "tiempos";
$cadena3 = $cadena1 . $cadena2;
print "<p>$cadena3</p>\n";
?>
<p>Pasatiempos</p>
<?php
$cadena1 = "Corre";
$cadena2 = "ve";
$cadena3 = "idile";
$cadena4 = $cadena1 . $cadena2 . $cadena3;
print "<p>$cadena4</p>\n";
?>
<p>Correveidile</p>

El operador . (punto) se puede utilizar en la instrucción print. En el ejemplo siguiente se concatenan una cadena, una variable y una cadena.

<?php
$nombre = "Don Pepito";
print "<p>¡Hola, " . $nombre . "! ¿Cómo está usted?</p>\n";
?>
<p>¡Hola, Don Pepito! ¿Cómo está usted?</p>

Nota: En el ejemplo anterior, se puede obtener el mismo resultado sin utilizar el operador . (punto), escribiendo la variable en la cadena:

<?php
$nombre = "Don Pepito";
print "<p>¡Hola, $nombre! ¿Cómo está usted?</p>\n";
?>
<p>¡Hola, Don Pepito! ¿Cómo está usted?</p>

Variables en cadenas

La forma de insertar variables dentro de cadenas depende del tipo de variable utilizado.

Tipos de variables

En el caso de números, cadenas o matrices de una dimensión, las variables se puede insertar directamente:

<?php
$numero = 5000;
$texto = "cinco mil";
$seEscribe = array("separado", "junto");
print "<p>El número $numero se escribe $seEscribe[0]: $texto</p>\n";
?>
<p>El número 5000 se escribe separado: cinco mil</p>

En el caso de matrices de dos o más dimensiones, las variables no se puede insertar directamente:

Desaconsejado
<?php
$nombre = "Don Pepito";
$saludos = array(array("Hello", "Hola"), array("Goodbye", "Adios"));

print "<p>¡$saludos[0][1], $nombre! ¿Cómo está usted?</p>\n";
?> 
<p>¡Array[1], Don Pepito! ¿Cómo está usted?</p>

Este resultado se obtiene porque PHP no sustituye la variable $saludos[0][1] por su valor, sino que sustituye únicamente la primera parte ($saludos[0]). Como $saludos[0] es una matriz de una dimensión, no puede escribir ningún valor y devuelve simplemente "Array". A continuación, PHP añade el [1] que quedaba y se obtiene la cadena "Array[1]".

Una solución a este problema es sacar la matriz de la cadena:

<?php
$nombre = "Don Pepito";
$saludos = array(array("Hello", "Hola"), array("Goodbye", "Adios"));
print "<p>¡" . $saludos[0][1] . ", $nombre! ¿Cómo está usted?</p>\n";
?>
<p>¡Hola, Don Pepito! ¿Cómo está usted?</p>

Otra solución sin necesidad de sacar la matriz de la cadena es rodear la variable con llaves ({ }):

<?php
$nombre = "Don Pepito";
$saludos = array(array("Hello", "Hola"), array("Goodbye", "Adios"));
print "<p>¡{$saludos[0][1]}, $nombre! ¿Cómo está usted?</p>\n";
?>
<p>¡Hola, Don Pepito! ¿Cómo está usted?</p>

Operaciones aritméticas

En el interior de las cadenas no se realizan operaciones aritméticas.

Desaconsejado
<?php
$x = 3;
$y = 4;
print "<p>Suma: $x + $y = $x + $y</p>\n";
print "<p>Multiplicación: $x x $y = $x * $y</p>\n";
?>
<p>Suma: 3 + 4 = 3 + 4</p>
<p>Multiplicación: 3 x 4 = 3 x 4</p>

Si se quiere mostrar el resultado de operaciones matemáticas, es necesario efectuar las operaciones fuera de las cadenas. En algunos casos no es necesario escribir las operaciones entre paréntesis, pero se recomienda escribirlas siempre entre paréntesis para no tener que preocuparse por cuándo hacen falta y cuándo no.

<?php
$x = 3;
$y = 4;
print "<p>Suma: $x + $y = " . ($x + $y) . "</p>\n";
print "<p>Multiplicación: $x x $y = " . ($x * $y) . "</p>\n";
?>
<p>Suma: 3 + 4 = 7</p>
<p>Multiplicación: 3 x 4 = 12</p>

Si no se escriben paréntesis en las operaciones, pueden no producirse errores, pero el resultado puede ser distinto al esperado en algunos casos:

Desaconsejado
<?php
$x = 3;
$y = 4;

print "<p>Suma: $x + $y = " . $x + $y . "</p>\n";
print "<p>Multiplicación: $x x $y = " . $x * $y . "</p>\n";
?>
4</p>
<p>Multiplicación: 3 x 4 = 12</p>

Por supuesto, siempre se pueden utilizar definir auxiliares que guarden los resultados y utilizar las variables auxiliares en la cadena.

<?php
$x = 3;
$y = 4;
$suma = $x + $y;
$producto = $x * $y;
print "<p>Suma: $x + $y = $suma</p>\n";
print "<p>Multiplicación: $x x $y = $producto</p>\n";
?>
<p>Suma: 3 + 4 = 7</p>
<p>Multiplicación: 3 x 4 = 12</p>

Nombres de variables

Si se quiere escribir el nombre de una variable, es decir, para que PHP no sustituya la variable por su valor, hay que escribir una contrabarra (\) antes de la variable.

<?php
$x = 3;
print "<p>La variable \$x vale $x</p>\n";
?>
<p>La variable $x vale 3</p>

Unir variables y texto

En html/css a veces es necesario juntar números y caracteres, como en el ejemplo siguiente en el que se establece el tamaño del párrafo en 30px:

<?php
print "<p style=\"font-size: 30px\" >Texto grande</p>\n";
?>
<p style="font-size: 30px" >Texto grande</p>

Si el tamaño está almacenado en una variable, no se puede juntar la variable con los caracteres ya que se interpretaría como una variable que no está definida y toma el valor vacío:

Desaconsejado
<?php
$x = 30;

print "<p style=\"font-size: $xpx\" >Texto grande</p>\n";
?>
<p style="font-size: " >Texto grande</p>

... pero se pueden utilizar llaves o sacar la variable de la cadena:

<?php
$x = 30;
print "<p style=\"font-size: {$x}px\" >Texto grande</p>\n";
?>
<p style="font-size: 30px" >Texto grande</p>
<?php
$x = 30;
print "<p style=\"font-size: " . $x . "px\" >Texto grande</p>\n";
?>
<p style="font-size: 30px" >Texto grande</p>