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.
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.
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.
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.
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.
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.
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.
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.
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.
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?
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.
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!
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.
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!
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?
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?
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:
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.
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?
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!?
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.
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?
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í:
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.
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:
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.
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.