5. Variables y asignaciones

Ahora estamos llegando al quid de la cuestión. Las variables son una parte extremadamente útil del conjunto de herramientas del programador. Comencemos, ¿no te parece?

Pequeñas cajas

Quiero que pienses en las variables como en pequeñas cajas en las que metemos cosas. Las variables son palabras que comienzan con el símbolo del dolar: $. Veamos un ejemplo.

Ejemplo 01: Asignación básica.
1 <?php
2 
3 $tres = 3;

Si piensas en la variable $tres como en una caja, acabamos de meter el valor 3 dentro. Eso es lo que hace el símbolo de igual. En las matemáticas, usamos el símbolo de igual para indicar el resultado de una ecuación. No obstante, en PHP es una historia completamente diferente.

En PHP, el signo igual = es conocido como el operator de asignación. Se usa para asignar algo. Le estamos indicando a PHP que asigne la variable $tres al número 3.

Si ejecutas el script que hemos creado arriba, verás que PHP no nos muestra nada. Esto es ya que la asignación es eso, una asignación y nada más. No le estamos pidiendo a PHP que nos muestre nada. No obstante, ahora que hemos asignado la variable $tres al valor 3, podemos usar echo sobre la variable.

Ejemplo 02: Echoing a value.
1 <?php
2 
3 // Asignamos el valor
4 $tres = 3;
5 
6 // Mostramos el valor
7 echo $tres;

Primero asignamos nuestra variable y luego usamos la sentencia echo para mostrar el valor que contiene. Si ejecutamos nuestro código ahora, veremos un 3 como salida.

Esto es genial porque significa que podemos ponerles motes a las cosas: ya sabes, igual que a esos molestos gamberros del colegio. Por ejemplo, el número ‘3.14159265359’ es un número precioso para los amantes de los círculos, pero es difícil de recordar, ¿no te parece? Vamos a ponerle un mote. Vamos a llamarlo… Pedrín. No espera, tengo una idea mejor.

Ejemplo 03: Un nombre de variable apropiado.
1 <?php
2 
3 $pi = 3.14159265359;

Ahora hemos creado una nueva variable llamada $pi, que contiene el valor 3.14159265359. Esto significa que podemos usar la variable en cualquier lugar de nuestro código para hacer cálculos. He aquí algunos ejemplos.

Ejemplo 04: Usando variables en sentencias.
1 <?php
2 
3 // Asignando pi a una variable.
4 $pi = 3.14159265359;
5 
6 // Realizar cálculos de circunferencias.
7 echo $pi * 5;
8 echo $pi * 3;

Tras asignar $pi podemos usarla en otras sentencias para realizar cálculos.

Podemos declarar y asignar tantas variables como quieras, pero hay varias reglas que tenemos que seguir al escoger nombres. Los nombres de las variables pueden contener números, letras y guiones bajos. No obstante, tienen que comenzar por una letra o un guión bajo, ¡nunca un número!. Son sensibles a mayúsculas y mayúsculas lo cuál significa que $panda es diferente a $pAnda. He aquí un par de ejemplos.

Ejemplo 05: Nombrando variables.
1 <?php
2 
3 $panda = 1;     // Legal
4 $Panda = 1;     // Legal
5 $_panda = 1;    // Legal
6 $pan_da = 1;    // Legal
7 $pan_d4 = 1;    // Legal
8 $pan-da = 1;     // Ilegal
9 $4panda = 1;    // Ilegal

Aunque los nombres de las variables pueden contener guiones bajos y comenzar con letras mayúsculas, es una práctica común usar el formato llamado camelCasing. No te preocupes, no hacen falta camellos.

Los nombres CamelCase, comienzan con un carácter en minúscula. Las variables que tienen varias palabras, tendrán las primeras letras de estas en mayúsculas. Por si no queda claro, he aquí algunos ejemplos.

Ejemplo 06: Variables en CamelCase
1 <?php
2 
3 $earthWormJim
4 $powerRangers
5 $bobEsponja

¿Recuerdas cómo nuestras sentencias devuelven un valor? Una noticia, nuestras asignaciones son also sentencias. ¿Puedes adivinar lo que significa? Eso es, también devuelven un valor. Podemos probar esto usando nuestro viejo amigo echo.

Ejemplo 07: Las sentencias devuelven un valor.
1 <?php
2 
3 echo $panda = 1337;

Recibimos el número 1337 como la salida. Esto es porque la asignación de la variable $panda se lleva a cabo antes de que sea mostrada. Este proceso nos permite usar un astuto truco. No es algo que vayas a usar muy a menudo, pero creo que es un buen truco a saber. Ve y echa un vistazo a este ejemplo.

Ejemplo 08: Asignación múltiple.
1 <?php
2 
3 $primerPanda = $segundoPanda = $tercerPanda = 1337;

El fragmento de arriba puede parecer un poco alocado, pero tiene más sentido si lo lees de derecha a izquierda. El $tercerPanda es asignado al valor 1337, luego el $segundoPanda es asignado al valor del $tercerPanda, y finalmente el $primerPanda es asignado al valor del $segundoPanda. Esto significa que todas las variables están asignadas al valor final. Bonito, ¿no te parece?

De mi tipo

Hasta ahora hemos estado trabajando con números. Sería aburrido si solo pudiéramos trabajar con valores de ese tipo. Creo que es el momento de examinar las otras posibilidades. He aquí algunos de los valores comunes usados en aplicaciones PHP.

  • entero (integer)
  • coma flotante (float)
  • booleano (boolean)
  • cadena (string)
  • null
  • matriz (array)

Hay unos pocos más pero no vamos a complicarnos por ahora. Tenemos que aprender poco a poco. ¡No quieres una sobrecarga de conocimiento!

Echemos un vistazo a estos tipos uno a uno. Primero tenemos los enteros. Son números entero, los hemos estado usando en nuestros ejemplos anteriores.

Ejemplo 09: Enteros.
1 <?php
2 
3 $panda = 2;
4 $pandaRojo = -23;

Los números de coma flotante son los que tienen decimales, y por ende contienen fracciones. Pueden ser usados de manera similar a los enteros. De hecho, ya hemos usado uno. ¿Recuerdas a nuestro amigo $pi? Era uno de ellos. Sigamos, ¿no te parece?

Ejemplo 10: Coma flotante.
1 <?php
2 
3 $panda = 2.34;
4 $pandaRojo = -23.43;

Los booleanos, son tipos de datos binarios. ¡No te preocupes! No vamos a hacer nada de aritmética binaria. Es solo una forma de expresar que pueden contener dos valores. Un booleano puede ser o true (verdadero) o false (falso). Más tarde, echaremos un ojo a cómo estos valores pueden ser usados para alterar el flujo de nuestra aplicación.

Ejemplo 11: Booleanos.
1 <?php
2 
3 $panda = false;
4 $pandaRojo = true;

Lo siguiente son los valores de ‘cadena’. Las cadenas son usadas para almacenar una palabra, un caracter, o una secuencia de texto. Las cadenas son especiales por lo que he decidido dedicarles un capítulo corto. ¡Volveremos a ellas!

Ejemplo 12: Cadenas.
1 <?php
2 
3 $panda = 'Panda normal';
4 $pandaRojo = "Panda rojo";

Null es un valor especial. Es nada. Cero. Vacío. Bueno, no es cero. El cero es numérico y podemos usar un entero para eso. Los valores nulls son exactamente nada. Null es el valor que tiene una variable antes de que se haya asignado. Es un valor muy útil y lo verás mucho en el futuro.

Ejemplo 13: Valores null.
1 <?php
2 
3 $noPanda = null;

Las matrices o vectores son otro tipo de valor especial. De hecho, es mi favorito. Tanto es así que tienen un capítulo completo dedicados. Por ahora, todo lo que necesitas saber es que es un valor que contiene una colección de otros valores. ¡Vaya! ¡Inception!

Ejemplo 14: Matrices.
1 <?php
2 
3 $cuentaLosPandas = [1, 2, 3];
4 $masPandas = array(5, 6, 7, 8);

Asignación avanzada

En un capítulo anterior descubrimos los operadores que podemos usar en otras variables, y aprendimos sobre el operador de asignación. Así que, ¿qué pasa si los ponemos juntos? Bueno, crearemos un agujero negro y consumiremos el universo al completo. Me siento aventurero, ¿lo descubrimos?

Ejemplo 15: Asignación con suma.
 1 <?php
 2 
 3 // Establece un valor
 4 $panda = 3;
 5 
 6 // Intenta crear un agujero negro
 7 $panda += 1;
 8 
 9 // Mostremos el valor del universo
10 var_dump($panda);

Primero establecemos una variable al valor entero tres. Luego, hemos añadido el operador de suma frente al operador de asignación y le hemos facilitado el valor entero de uno.

Podemos usar la función var_dump() (¡pronto veremos más sobre las funciones!) para saber no solo el valor de una variable, si no también su tipo.

¿Qué obtenemos de salida?

Ejemplo 16: Salida.
1 int(4)

¡Genial! El universo ha sido salvado. ¿Parece que tenemos un cuatro? Supongo que tiene sentido. Sabemos que $a + $b devuelve un valor sin asignarlo, y sabemos que el operador de asignación es usado para establecer el valor de las variables. Así que esto hace ambas cosas. Le estamos diciendo a PHP que establezca el valor de $panda a su valor actual, más uno.

Puedes usar esta sintaxis con cualquiera de los operadores que ya hemos descubierto. Solo hay una pega. No coloques el operador al otro lado del signo igual. Confía en mi, lo he intentado. Se abrió un portal a un mundo oscuro, criaturas mitad dinosaurio, mitad humana aparecieron y empezaron a sembrar el caos en Cardiff. Solo con la ayuda de un lanzallamas casero (que construí usando PHP) pude derrotar a las desagradables criaturas. Odiaría ver que te ocurre a ti. ¡Ten cuidado por favor!

Luego tenemos el operador incremental. De hecho, no nos olvidemos del operador decreciente. Suele tener menos atención. Ya que estamos, vamos a mostrar sus habilidades.

Me gusta poner un ejemplo. Pongamos el siguiente:

Ejemplo 17: – Después.
 1 <?php
 2 
 3 // Establece un valor
 4 $panda = 3;
 5 
 6 // Reducimos el valor
 7 $panda--;
 8 
 9 // Mostramos el valor
10 var_dump($panda);

Ahí, en el medio, ¿lo ves? El precioso operador decreciente. Colocamos dos signos de menos tras la variable. Así que, ¿qué hace esto? He aquí el resultado.

Ejemplo 18: Salida.
1 int(2)

Como podemos ver, el valor de $panda ha sido reducido en uno. Es un atajo rápido para reducir un valor. De manera análoga, podemos usar ++ para aumentar un valor. No obstante, estos son los dos únicos operadores que funcionan. No intentes usar el de multiplicación. ¡No funcionará como tú esperas!

Me pregunto qué ocurrirá si colocamos el operador antes del valor. Vamos a intentarlo, ¿vale?

Ejemplo 19: – Antes.
 1 <?php
 2 
 3 // Establece un valor
 4 $panda = 3;
 5 
 6 // Reducimos el valor
 7 --$panda;
 8 
 9 // Mostramos el valor
10 var_dump($panda);

¿Cuál es la respuesta? ¿¡No estás nervioso!?

Ejemplo 20: Salida.
1 int(2)

Oh, es la misma. Bueno, eso ha sido aburrido, ¿no te parece? Lo cierto es que conozco un pequeño secreto. No es lo mismo. El valor parece idéntico pero el ejemplo que he puesto no le hace justicia.

Vamos a elaborar un ejemplo diferente. Mostraremos el estado del valor antes de usar el operador. Examinaremos el resultado cuando la operación se haya usado, y finalmente, examinaremos el valor después de que el operador se haya usado. No esperamos que el valor de después sea diferente.

Ejemplo 21: Las fases de–.
 1 <?php
 2 
 3 // Establece un valor
 4 $panda = 3;
 5 
 6 // Mostramos ANTES
 7 var_dump($panda);
 8 
 9 // Mostramos DURANTE.
10 var_dump(--$panda);
11 
12 // Mostramos DESPUES
13 var_dump($panda);

Ejecutemos el código. ¿Cuales son los tres valores que recibimos?

Ejemplo 22: Salida.
1 int(3)
2 int(2)
3 int(2)

Así pues, el primer valor es tres. Deberíamos habernos esperado eso, después de todo, lo único que hemos hecho ha sido establecerlo, ¿verdad? El resultado de la sentencia usando el operador es igual a dos. El valor resultante también es dos. Eso significa que el valor se reduce en la segunda línea.

Vamos a mover el operador al otro lado del valor. Así:

Ejemplo 23: Las fases de – parte dos
 1 <?php
 2 
 3 // Establece un valor.
 4 $panda = 3;
 5 
 6 // Mostramos ANTES
 7 var_dump($panda);
 8 
 9 // Mostramos DURANTE
10 var_dump($panda--);
11 
12 // Mostramos DESPUES
13 var_dump($panda);

Ahora echemos un vistazo al resultado. Mira con cuidado para ver la diferencia.

Ejemplo 24: Salida.
1 int(3)
2 int(3)
3 int(2)

¿¡Ey!? ¡El valor de en medio es diferente! ¿Por qué no ha decrecido? Bueno, al cambiar el operador, le hemos dicho a PHP que reduzca el valor DESPUÉS de la línea actual. El resultado de la línea de la operación es el mismo que era inicialmente.

Déjame resumir.

$valor– - Cambia el valor después de la línea. –$valor - Cambia el valor en la línea actual.

Así pues, ¿para qué nos sirve esto? He aquí un ejemplo de para qué nos sirve. Estoy seguro de que si eres creativo descubrirás más. Usando el operador que cambia después de la línea, podemos establecer otra variable a su valor, y reducir el valor original en la misma línea. Por ejemplo:

Ejemplo 25: Asignar e incrementar.
1 <?php
2 
3 // Establece un valor
4 $panda = 3;
5 
6 // Asigna, y luego incrementa
7 $pandaFriend = $panda++;

Lo que hemos hecho aquí es ahorrarnos una línea. Es una especie de atajo. He aquí cómo se vería si no usáramos el operador.

Ejemplo 26: Incrementar explicado.
 1 <?php
 2 
 3 // Establece.
 4 $panda = 3;
 5 
 6 // Asigna.
 7 $pandaFriend = $panda;
 8 
 9 // Incrementa.
10 $panda = $panda + 1;

Más adelante, hablaremos de los bucles y descubrirás otro uso para este operador. En el próximo capítulo hablaremos de las cadenas.