PHP INTERRUPTOR

 

Les instruccions if ... else if ... else if permeten resoldre pràcticament totes les decisions que calgui prendre en programació, però en ocasions ens trobarem amb casos en què volem avaluar condicions amb una estructura que fan més còmode fer servir una instrucció alternativa: switch.

 

Suposem una avaluació d'aquest tipus:

si (variable $ == Valor1 ) {

... Sentències ;

} més si (variable $ == Valor2 ) {

... Sentències ;

} més si (variable $ == Valor3 ) {

... Sentències ;

} un altre {

... Sentències ;

}

Es tracta d'un cas en què tenim diverses alternatives per realitzar una acció determinada segons el valor pres per una variable. Per a aquests casos la majoria dels llenguatges de programació inclouen una instrucció que permet "seleccionar" entre els possibles valors d'una variable: la instrucció switch (en espanyol: seleccioneu).

La instrucció switch és una forma d'expressió d'un aniuament múltiple d'instruccions if ... else. El seu ús no pot considerar-se, per tant, estrictament necessari, ja que sempre podrà ser substituïda per l'ús de if. No obstant això, de vegades és útil en introduir eficiència i major claredat en el codi.

 

ESTRUCTURA GENERAL D'UNA EXPRESSIÓ SWITCH

La sintaxi serà (expressió serà normalment una variable el contingut volem avaluar, però pot ser una operació matemàtica, una expressió booleana, etc.):              

/* Exemple switch - */

switch(expressio) {

        case valor1:

        instruccions;

        trencar;

 

        case valor2:

        instruccions;

        trencar;

        .

        .

        .

        default:

        sentències;

        break;

 }

 

/* Exemple switch  */

switch(expressio) {

        case valor1:

        case valor2:

        case valor3:

        instruccions;

        break;

 

        case valor4:

        instruccions;

        break;

        .

        .

        .

        default:

        sentències;

        break;

 }

Esquemàticament en forma de diagrama de flux:

break és opcional (però en general recomanable) i provoca que un cop trobada una coincidència acabi l'avaluació de casos (provoca un salt passant el control del programa o flux d'execució a la instrucció immediata següent fora del switch). Si no s'inclou, s'avaluarien la resta de casos (executant si fossin certs). Si no s'inclou break, podria produir-se que s'executin dos o més casos.

La clàusula default és opcional i representa les instruccions que s'executaran en el cas que no es verifiqui cap dels casos avaluats.L'últim break dins d'un switch (en default si existeix aquesta clàusula, o en l'últim cas avaluat si no existeix default ) també és opcional, però el inclourem sempre per ser metòdics.

Es permet avaluar tant números com cadenes de text o valors booleans. switch només permet avaluar valors concrets de l'expressió: no permet avaluar intervals (pertinença de l'expressió a un interval o rang) ni expressions compostes.

 

EXEMPLE

Anem a veure ara com podem obtenir un mateix resultat usant if o usant switch. Escriu ara el codi d'exemple d'ús d'if que mostrem a continuació i guardeu amb un nom de fitxer com ejemplo1.php. A continuació, puja el fitxer al servidor i visualitza el resultat.

<? Php

// Exemple ús if else aprenderaprogramar.com

$variable=2 ;

if($==variables1 ) {

echo '$s variables Igual a 1.' ;

} més si ($==variable de febrer) {

echo '$s variables Igual a 2. " ;

} més si ($==variable de 3 ) {

echo '$s variables Igual a 3' ;

} un altre {

echo 'variable $ no és Igual a 1, 2 o 3.' ;

}

?>

<? Php

$Variable=2 ;

interruptor($variable) {

cas 1 :

echo '$s variables Igual a 1.' ;

trencar ;

cas 2 :

echo '$s variables Igual a 2. " ;

trencar ;

cas 3 :

echo '$s variables Igual a 3' ;

trencar ;

per defecte :

echo 'variable $ no és Igual a 1, 2 o 3.' ;

}

?>

 

Escriu ara el codi d'exemple d'ús de switch hem mostrat i guardeu amb un nom de fitxer com ejemplo2.php. A continuació, puja el fitxer al servidor i visualitza el resultat.

El resultat vam comprovar que en tots dos casos és: $variable és igual a 2.

Si canviem $variable = 2 per $variable = 5 a l'inici de codi el resultat seria: $Variable no és igual a 1, 2 o 3.

Una diferència important respecte a les instruccions if ... else if ... else és que es requereix de la instrucció break per sortir del switch en acabar les instruccions corresponents a un casi. Només podem especificar un valor en cada casi, no s'admet indicar més d'un valor. No obstant això, si deixem un casi en blanc i ometem el break, donem lloc al fet que s'executin certes instruccions si el valor coincideix amb algun dels casi en joc. Això ho veurem més clar amb un exemple.

Escriu ara aquests altres codis i guarda'ls amb noms d'arxiu com ejemplo3.php i ejemplo4.php. A continuació, puja els fitxers al servidor i visualitza el resultat.

<? Php

// Exemple ús if else aprenderaprogramar.com

$ Variable = 2 ;

si ($ == variables 1 ) {

echo '$ variable és Igual a 1.' ;

} més si ($ == variable d' febrer O $ == variable de 3 ) {

echo '$ variable és Igual a 2 o 3.' ;

} un altre {

echo '$ variable no és Igual a 1, 2 o 3.' ;

}

?>

<? Php

$ Variable = 2 ;

interruptor ($ variable) {

cas 1 :

// S'executa si $ variable val 1

echo '$ variable és Igual a 1.' ;

trencar ;

cas 2 :

cas 3 :

// S'executa si $ variable val 2 o 3

echo '$ variable és Igual a 2 o 3.' ;

trencar ;

per defecte :

// S'executa en qualsevol altre cas

echo '$ variable no és Igual a 1, 2 o 3.' ;

}

?>

En qualsevol de les dues formes mostrades, la sortida obtinguda seria: $variable és igual a 2 o 3.

En aquest cas, l'avaluar la segona instrucció casi no es troba cap break pel que se segueixen executant les instruccions següents al tercer casi, tot i que $ variable és diferent de 3, ja que al no existir un break anterior els casos 2 i 3 queden "agrupats". Més encara, si esborrem el break del tercer casi també s'executaran les instruccions següents a default, i la sortida seria llavors:

$Variable és igual a 2 o 3.

$Variable no és igual a 1, 2 o 3.

 

Per això és molt important que quan escriguis una instrucció switch posis break en tots els casi, o bé que si deixes algun break sense escriure sigui perquè conscientment vulguis fer-ho i no per oblit.

 

EXERCICI 1

Analitza el següent codi PHP:

// Exemple d'ús switch PHP aprenderaprogramar.com

        interruptor ($) {mes

            cas 1:

            echo ("El mes és gener");

            trencar;

            case 2: echo ("El mes és febrer"); break;

            casi 10: echo ("El mes és octubre"); break;

            default: echo ("El mes no és gener, febrer ni octubre"); break;

        }

Respon a les següents qüestions:

a) Què és el que fa aquest codi?

b) Completa el codi de manera que anyades les etiquetes i defineixis el valor de $ mes = 1. Puja el fitxer al servidor i comprova el resultat. Quin és el codi complet? Quin és el resultat obtingut per pantalla?

Per comprovar si les teves respostes i codi són correctes pots consultar als fòrums aprenderaprogramar.com.

 

EXERCICI 2

Considera estàs desenvolupant una web on treballes amb tipus de motor (suposem que es tracta del tipus de motor d'una bomba per moure fluids). Defineix una variable $tipoMotor i assigna-li valor 3. Els valors possibles són 1, 2, 3, 4. A través d'un condicional switch fes el següent:

a) Si el tipus de motor és 0, mostrar un missatge indicant "No hi ha establert un valor definit per al tipus de bomba".

b) Si el tipus de motor és 1, mostrar un missatge indicant "La bomba és una bomba d'aigua".

c) Si el tipus de motor és 2, mostrar un missatge indicant "La bomba és una bomba de gasolina".

d) Si el tipus de motor és 3, mostrar un missatge indicant "La bomba és una bomba de formigó".

e) Si el tipus de motor és 4, mostrar un missatge indicant "La bomba és una bomba de pasta alimentària".

f) Si no es compleix cap dels valors anteriors mostrar el missatge "No hi ha un valor vàlid per tipus de bomba".

Quin és el codi complet? Quin és el resultat obtingut per pantalla?