Condiciones en PHP
SOLUCIONARIO
Condiciones en PHP
2025-01-12
Por
Occam's Razor

#!/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 stdin o stdout, 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: bool con valores true/false
  • Soporta switch
  • Soporta constantes nativamente (define (CONSTANTE, val, case-sensitive) )

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)