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 CIERTO (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_