Salta el contingut

Desenvolupament web dinàmic backend amb PHP
Conceptes

Sessió 2: Estructures de control

Objectiu Sessió 2

En aquesta sessió l'objectiu és introduir les estructures de control del llenguatge per a controlar la lògica del backend. Tant blocs alternatius de lògica, com repetitius.

Alternatives

Enllaç a W3Schools i PHP.net

Formen part de la lògica d'execució d'un codi desenvolupat i anirà associat a una expressió que farà que s'executi un codi o no.

Normalment caldrà definir la condició, que serà una expressió lògica i les accions que executarà en cas d'avaluar-se a cert i les altres en cas de fals.

Seria un psedocodi similar a:

    Obtenir Temperatura
    SI (Temperatura < 0) LLAVORS
        escriure "Està glaçant!"
    SINO
        escriure "S'hi està ."
    FSI

Tenim:

  • if
  • if else
  • elseif / else if
  • switch

Exemple alternativa

    <!DOCTYPE html>
    <html>
    <body>
    <?php
        $hora = date("H"); // obternim l'hora actual

        // comparem hora amb 8h, 20h i mostrem el missatge corresponent
        if ($hora < "8") {
          echo "Bona matinada!";
        } elseif ($hora < "20") {
          echo "Bon dia!";
        } else {
          echo "Bona nit!";
        }
    ?>


    </body>
    </html>

Podem observar com diguem una frase o una altra depenent de l'hora del dia que s'executi el codi.

Això ho aconseguim obtenint la hora del servidor amb

    $hora = date("H"); // obternim l'hora actual

llavors comparem el valor guardat a la variable $hora amb 8h i retornem el text "Bona matinada"

En cas contrari, mirem si és abans de les 20h i retornem el text: "Bon dia"

altrament, retornem "Bona nit"

La sintaxi bàsica és:

sintaxis bàsica if
<?php
    if (condició)
    {
        // accions de condició certa
    }
    else
    {
        // accions de condició falsa
    }
?>
sintaxis elseif
<?php
    if (condició1)
    {
        // accions de condició 1 certa
    }
    elseif (condició2)
    {
        // accions de condició 2 certa
    }
    else
    {
        // accions de condició falsa
    }
?>
sintaxis switch
<?php
    switch  (expressió)
    case label1:
        //code block
        break;
    case label2:
        //code block;
        break;
    case label3:
        //code block
        break;
    default:
        //code block
?>

Bucles

Enllaç a W3Schools i PHP.net

Formen part de la lògica d'execució d'un codi desenvolupat i ens ajuda a repetir unes instruccions un número definit o indefinit (condició) de vegades.

Bucle
    Mentre (Condició sigui certa)
        ...
        Processar
        ...
    FMentre

Normalment seguiran la lògica de:

  • Esquema de recorregut: Executar unes instruccions per tots els elements a tractar. Exemple: Comptar persones.
  • Esquema de recerca: Executar unes instruccions cercant algun element a dins dels candicats. Caldrà definir una condició de trobat i de final. Per exemple: cercar a una persona.
Esquema de recorregut
    Obtenir 1r element
    Mentre (No final)
        Processar 
        Obtenir següent element
    FMentre
Esquema de recerca
    Obtenir 1r element
    Mentre (No trobat) I (No final)
        Processar 
        Obtenir següent element
    FMentre
    Si Trobat Llavors
        accions trobat
    Sino
        accions No trobat
    FSi

NOTA

Cal definir bé les condicions de final per no generar un bucle infinit. Cal definir com obtenir següent element.

De la nostra manera de pensar, podriem tenir un destí a arribar

Caminem
    Posició actual
    Mentre (No hem arribat al destí)
        Fem una passa
    FMentre

    //Quan sortim del bucle, significa que hem arribat al final.

Podem tenir condicions més complexes a avaluar. O fins i tot més d'una acció a realitzar.

Caminem
    Posició actual
    Mentre (No hem arribat al destí O estem cansats)
        Fem una passa
        SI (el destí és cap a la dreta)
            Girem a la dreta
        SINO SI(el destí és cap a l'esquerra)
            Girem a l'esquerra
        FSI
    FMentre

    //Quan sortim del bucle, significa que hem arribat al final o bé estem cansats.

Tenim 4 tipus de bucles:

while: Repeteix instruccions mentre la condició sigui certa.

Exemple while

<?php
    while (condició)
    {
        // code block
    }
?>

    <!DOCTYPE html>
    <html>
    <body>

    <?php
        $i = 0;
        while ($i < 10)
        {
            echo "<br>" . $i;
            $i++;
        }
    ?>


    </body>
    </html>

Usarem el bucle while per a generar una seqüència de números del 0 fins a arribar a un menor de 10.

Element inicial: 0

condició de final: quan ($i < 10) s'avalui a fals, mentre sigui cert, anirà fent bucles.

do while: Repeteix instruccions fins que una condició deixa de ser certa

Exemple do while

<?php
    do
    {
        // code block
    }
    while (condició)   
?>

    <!DOCTYPE html>
    <html>
    <body>

    <?php
        $i = 0;
        do 
        {
            echo "<br>" . $i;
            $i++;
        }while ($i < 10)
    ?>


    </body>
    </html>

Usarem el bucle do while per a generar una seqüència de números del 0 fins a arribar a un menor de 10.

Element inicial: 0

condició de final: quan ($i < 10) s'avalui a fals, mentre sigui cert, anirà fent bucles.

Ull, ara si que farà la última volta amb el valor de 10. Però tot dependrà de quan processem o incrementem el valor.

Sempre s'executarà el bucle una vegada com a mínim.

for: Repeteix instruccions un número específic de vegades

Exemple for

<?php
    for(inici; condició; increment)
    {
        // code block
    }
?>

    <!DOCTYPE html>
    <html>
    <body>

    <?php
        for ($i=0; $i < 10; $i++)
        {
            echo "<br>" . $i;
        }
    ?>


    </body>
    </html>

Usarem el bucle for per a generar una seqüència de números del 0 al 9

Element inicial: 1

Condició de final: quan ($i < 10) s'avalui a fals, mentre sigui cert, anirà fent bucles.

Increment: d'un a un amb $i++

foreach: repeteix instruccions per cada un dels elements d'un array.

Exemple foreach

sintaxis foreach
<?php
    foreach(elements as element)
    {
        // code block
    }
?>

    <!DOCTYPE html>
    <html>
    <body>

    <?php
        $fruites = array("Poma", "Peres", "Platans", "Maduixes");
        foreach ($fruites as $fruita)
        {
             echo "<br>" . $fruita;
        }
    ?>


    </body>
    </html>

Usarem el bucle for each per a generar una llista de fruites

La gràcia del bucle foreach, és que és dinàmic segons els elements que conté l'array