Las expresiones son la piedra angular de PHP. En PHP, casi cualquier
cosa que escribes es una expresión. La forma más
simple y ajustada de definir una expresión es "cualquier cosa
que tiene un valor".
Las formas más básicas de expresiones son las
constantes y las variables. Cuando escribes "$a = 5", estás
asignando '5' a $a. '5', obviamente, tiene el valor 5 ó, en otras
palabras '5' es una expresión con el valor 5 (en este caso,
'5' es una constante entera).
Después de esta asignación, se espera que el valor de
$a sea 5 también, de manera que si escribes $b = $a, se
espera también que se comporte igual que si escribieses $b =
5. En otras palabras, $a es una expresión también con
el valor 5. Si todo va bien, eso es exactamente lo que
pasará.
Las funciones son un ejemplo algo más complejo de
expresiones. Por ejemplo, considera la siguiente función:
Suponiendo que estés familiarizado con el concepto de
funciones (si no lo estás échale un vistazo al
capÃtulo sobre funciones), asumirás que teclear
$c = foo() es esencialmente lo mismo que escribir
$c = 5, y has acertado. Las funciones son
expresiones que valen el valor que retornan. Como foo() devuelve 5,
el valor de la expresión 'foo()' es 5. Normalmente las
funciones no devuelven un valor fijo, sino que suele ser
calculado.
Desde luego, los valores en PHP no se limitan a enteros, y lo
más normal es que no lo sean. PHP soporta tres tipos
escalares: enteros, punto flotante y cadenas (los tipos escalares
son aquellos cuyos valores no pueden 'dividirse' en partes menores,
no como los arrays, por ejemplo). PHP también soporta dos
tipos compuestos (no escalares): arrays y objetos. Se puede asignar
cada uno de estos tipos de valor a variables o bien retornarse de
funciones, sin ningún tipo de limitación.
Hasta aquÃ, los usuarios de PHP/FI 2 no deberÃan haber
notado ningún cambio. Sin embargo, PHP lleva las expresiones
mucho más allá, al igual que otros lenguajes. PHP es
un lenguaje orientado a expresiones, en el sentido de que casi todo
es una expresión. Considera el ejemplo anterior '$a = 5'. Es
sencillo ver que hay dos valores involucrados, el valor de la
constante entera '5', y el valor de $a que está siendo
actualizado también a 5. Pero la verdad es que hay un valor
adicional implicado aquÃ, y es el valor de la propia
asignación. La asignación misma se evalúa al
valor asignado, en este caso 5. En la práctica, quiere decir
que '$a = 5', independientemente de lo que hace, es una
expresión con el valor 5. De esta manera, escribir algo como
'$b = ($a = 5)' es como escribir '$a = 5; $b = 5;' (un punto y coma
marca el final de una instrucción). Como las asignaciones se
evalúan de derecha a izquierda, puedes escribir
también '$b = $a = 5'.
Otro buen ejemplo de orientación a expresiones es el pre y
post incremento y decremento. Los usuarios de PHP/FI 2 y los de
otros muchos lenguajes les sonará la notación
variable++ y variable--. Esto son las operaciones de incremento y
decremento. En PHP/FI 2, la instrucción '$a++' no tiene valor
(no es una expresión), y no puedes asignarla o usarla de
ningún otro modo. PHP mejora las caracterÃsticas del
incremento/decremento haciéndolos también expresiones,
como en C. En PHP, como en C, hay dos tipos de incremento -
pre-incremento y post-incremento. Ambos, en esencia, incrementan la
variable y el efecto en la variable es idéntico. La
diferencia radica en el valor de la propia expresion incremento. El
preincremento , escrito '++$variable', se evalúa al valor
incrementado (PHP incrementa la variable antes de leer su valor, de
ahà el nombre 'preincremento'). El postincremento, escrito
'$variable++', se evalúa al valor original de $variable antes
de realizar el incremento (PHP incrementa la variable después
de leer su valor, de ahà el nombre
'postincremento').
Un tipo muy corriente de expresiones son las expresiones de
comparación. Estas expresiones se evalúan a 0 o 1,
significando FALSO (FALSE) o VERDADERO (TRUE), respectivamente. PHP
soporta > (mayor que), >= (mayor o igual que), == (igual que), !=
(distinto), < (menor que) y <= (menor o igual que). Estas
expresiones se usan frecuentemente dentro de la ejecución
condicional como la instrucción
if.
El último tipo de expresiones que trataremos, es la
combinación operador-asignación. Ya sabes que si
quieres incrementar $a en 1, basta con escribir '$a++' o ++$a'.
Pero qué pasa si quieres añadir más de 1, por
ejemplo 3? PodrÃas escribir '$a++' múltiples veces,
pero no es una forma de hacerlo ni eficiente ni cómoda. Una
práctica mucho más corriente es escribir '$a = $a +
3'. '$a + 3' se evalúa al valor de $a más 3, y se
asigna de nuevo a $a, lo que resulta en incrementar $a en 3. En PHP,
como en otros lenguajes como C, puedes escribir esto de una forma
más concisa, que con el tiempo será más clara y
también fácil de entender. Añadir 3 al valor
actual de $a se puede escribir como '$a += 3'. Esto quiere decir
exactamente "toma el valor de $a, súmale 3, y asÃgnalo
otra vez a $a". Además de ser más corto y claro,
también resulta en una ejecución más
rápida. El valor de '$a += 3', como el valor de una
asignación normal y corriente, es el valor asignado. Ten en
cuenta que NO es 3, sino el valor combinado de $a más 3
(ése es el valor asignado a $a). Cualquier operación
binaria puede ser usada en forma de operador-asignación, por
ejemplo '$a -= 5' (restar 5 del valor de $a), '$b *= 7' (multiplicar
el valor de $b por 7), etc.
Hay otra expresión que puede parecer extraña si no la
has visto en otros lenguaes, el operador condicional ternario:
Si el valor de la primera subexpresión es verdadero (distinto
de cero), entonces se evalúa la segunda subexpresión,
si no, se evalúa la tercera y ése es el valor.
El siguiente ejemplo te ayudará a comprender un poco mejor el
pre y post incremento y las expresiones en general:
Al principio del capÃtulo hemos dicho que
describirÃamos los distintos tipos de instrucciones y, como
prometimos, las expresiones pueden ser instrucciones. Sin embargo,
no todas las expresiones son instrucciones. En este caso, una
instrucción tiene la forma 'expr' ';', es decir, una
expresión seguida de un punto y coma. En '$b=$a=5;', $a=5 es
una expresión válida, pero no es una
instrucción en sà misma. Por otro lado '$b=$a=5:'
sà es una instrucción válida.
Una última cosa que vale la pena mencionar, es el valor
booleano de las expresiones. En muchas ocasiones, principalmente en
condicionales y bucles, no estás interesado en el valor
exacto de la expresión, sino únicamente si es TRUE
ó FALSE Las constantes TRUE y FALSE son los dos
posibles valores booleanos. Cuando es necesario, una
expresión se puede transformar automáticamente al tipo
booleano. Consultar la sección sobre
type-casting para obtener detalles de como se hace.
PHP brinda una completa y potente implementación de
expresiones, y documentarla enteramente está más
allá del objetivo de este manual. Los ejemplos anteriores,
deberÃan darte una buena idea de qué son las
expresiones y cómo construir expresiones útiles. A lo
largo del resto del manual, escribiremos
expr para indicar una expresión
PHP válida.