#!/usr/bin/php -f
<?php
$n = 42;
$h = $v = 0;
echo "Adivina en que numero estoy pensando ? ";
fscanf (STDIN, "%d\n", $v); // reads number from STDIN
if ($v < 0)
{
echo "Sólo números positivos\n";
return -1;
}
if ($v == $n ) echo "Bien Hecho!\n";
else
{
echo "Sigue Probando!\n";
echo "El número es " . ($v < $n ? "MAYOR" : "MENOR") . "\n";
echo "Pista : \n";
$h = ($v > $n) ? $v - $n : $n - $v;
if ($h < 5) echo " TE QUEMAS!!!\n";
else if ($h < 10) echo " CALIENTE\n";
elseif ($h < 15) echo " TEMPLADO\n";
else echo " FRIO\n";
}
?>PHP como sabemos está fuertemente influenciado por C y Perl, así que
las expresiones condicionales son prácticamente iguales que en C. Es
decir, bloques if/else agrupados con llaves a no ser que el
bloque solo contenga una instrucción, caso en el que las llaves son
opcionales. PHP ofrece la palabra clave elseif igual que
Perl, la cual es equivalente a las palabras clave else if.
En el código de arriba podéis ver los dos cosos. No, no se trata de un
error.
PHP nos ofrece un operado ternario
(cond) ? expr1 : expr2 igual que C.
NOTA
PHP ofrece diferentes SAPIs (Server Application Programming Interfaces). El más conocido es el denominado CGI (Common Gateway Interface) SAPI y es el que se utiliza para el desarrollo de aplicaciones web. Cuando utilizamos PHP directamente hacemos uso del CLI (Command-Line Interface) SAPI. Este SAPI nos ofrece cosas como acceso a streams como
stdinostdout, mientras el CGI SAPI nos ofrce acceso a los parámetros de nuestra página web o las cabeceras HTTP de la petición que recibimos.
PHP ofrece una sintaxis alternativa estilo Python. Las llaves para
los constructores if, while, for, foreach and switch se
sustituyen por : y el bloque se termina, respectivamente,
con endif, endwhile, endfor, endforeach, endswitch. Nuestro
programa anterior utilizando esta sintaxis alternativa quedaría de la
siguiente forma:
#!/usr/bin/php -f
<?php
$n = 42;
$h = $v = 0;
echo "Adivina en que numero estoy pensando ? ";
fscanf (STDIN, "%d\n", $v); // reads number from STDIN
if ($v < 0):
echo "Sólo números positivos\n";
return -1;
endif;
if ($v == $n ): echo "Bien Hecho!\n";
else:
echo "Sigue Probando!\n";
echo "El número es " . ($v < $n ? "MAYOR" : "MENOR") . "\n";
echo "Pista : \n";
$h = ($v > $n) ? $v - $n : $n - $v;
if ($h < 5): echo " TE QUEMAS!!!\n";
elseif ($h < 10): echo " CALIENTE\n";
elseif ($h < 15): echo " TEMPLADO\n";
else: echo " FRIO\n";
endif;
endif;
?>Dos comentarios:
- Si, existe el constructore
elseif. Este constructor es el único permitido cuando utilizamos la notación alternativa con:como en el ejemplo anterior. - Observad el punto y coma al final de
endif
PHP, dada su similitud con C, ofrece una instrucción
switch idéntica a la que encontramos en el lenguaje C, con
la única salvedad de que los casos pueden ser tanto enteros como en C,
como cadenas de caracteres o expresiones. El caso especial
default se usa como caso por defecto, y la instrucción
break permite terminar la ejecución de un caso. Al igual
que en la mayoría de lenguajes, podemos asociar varios casos a un mismo
bloque de código.
$a = "hola";
switch ($a) {
case "hello":
case "hola":
echo "Que tal?";
break;
case "bye":
case "adios":
echo "nos vemos...";
break;
default:
echo "Que me estás contando?";
}Utilizando la sintaxis alternativa el código anterior quedaría de la siguiente forma:
$a = "hola";
switch ($a):
case "hola": // No están permitidos espacios antes del primer caso
echo "Que tal?";
break;
case "adios":
echo "nos vemos...";
break;
default:
echo "Que me estás contando?";
endswitch;Es posible sustituir los dos puntos (:) por puntos y
coma (;) en los programas anteriores. PHP nos permite
utilizar cualquier tipo de expresión en los casos del
switch, por ejemplo:
$val = 1;
$op = 3;
switch ($val) {
case $op - 3: // Si $op - 3 == val
print "Caso 1";
break;
case $op - 4:
print "Caso 2";
break;
}La instrucción switch se puede utilizar para simular
bloques if-else. Nuestro programa de ejemplo se podría
escribir de la siguiente forma:
switch (true) {
case $h < 5:
echo " TE QUEMAS!!!\n";
break;
case $h < 10:
echo " TE QUEMAS!!!\n";
break;
case $h < 15:
echo "TEMPLADO\n";
break;
default:
echo "Frio";
}PHP ofrece una instrucción adicional conocida como
match, la cual se puede ver como un expresión
switch capaz de devolver valores. Por ejemplo:
$val = 1;
$return = math ($val) {
1,2 => "1 o 2",
3 => "3",
default => "Otra cosa",
};match funciona prácticamente igual que
switch, pero devolviendo un valor. A modo de ejemplo, el
siguiente código podría utilizarse para mostrar la pista:
echo match (true) {
$h < 5 => "TE QUEMAS",
$h < 10 => "CALIENTE",
$h < 15 => "TEMPLADO",
default => "FRIO",
};PHP ofrece un tipo booleano llamado bool que puede tomar
los valores true o false.
Es posible definir constantes usando el comando
define (CONSTANTE, Valor, case-sensitive), donde el último
valor nos permite decidir si queremos que el nombre de la constante sea
diferente dependiendo de la capitalización de las letras.
Resumen
- Soporta
if ... [elseif] ...[else [if] ] ... - No ofrece reducida para
if - Soporta operador terciario
(cond) ? val1 : val2; - Soporta booleanos:
boolcon valorestrue/false - Soporta
switch - Soporta constantes nativamente
(
define (CONSTANTE, val, case-sensitive))
■
