ESTRUCTURES CONDICIONALS

 

En PHP hi ha una sèrie d'instruccions que permeten prendre decisions lògiques quan programem: aquestes instruccions, comuns a diferents llenguatges de programació, se solen anomenar de forma general "condicionals".

  • if ... else

  • if ... elseif ... else

  • interruptor

 

Condicional IF ... ELSE ÉS PHP

Aquestes instruccions són potser les més usades de tots els llenguatges de programació, ja que són les més bàsiques. IF (en espanyol: si ...) ELSE (en espanyol: sinó ...). L'estructura general d'un condicional if else és la següent:

if (expressió) {

... Sentències 1, 2, 3 ...;

} Else {

... Sentències A, B, C ...;

}

En aquest tros de codi estaríem dient que si l'expressió es compleix s'executen les sentències 1, 2, 3 ..., i en cas que no es complís l'expressió s'executarien les sentències que són dins el else, és a dir, les sentències A , B, C ...

Escriu aquest codi en un editor com Notepad++ i guardeu amb un nom de fitxer com ejemplo1.php. A continuació, puja el fitxer al servidor i visualitza el resultat.

<? Php

$galetes = true ;

si ($galetes== veritat ) {

echo 'Hi ha galetes' ;

} elseif {

echo 'No hi ha galetes' ;

}

?>

En aquest exemple, estem donant un valor $galetes i vam comprovar si el valor d'aquesta variable és true o no, introduint-lo en l'expressió del condicional. Tal qual està, aquest exemple produiria el resultat 'Hi ha galetes', tot i que si canviéssim $galetes = true;per $galetes = false donaria com a resultat la segona sentència.

Escriu ara aquest altre codi guarda'l amb un nom de fitxer com ejemplo2.php. A continuació, puja el fitxer al servidor i visualitza el resultat.

<? Php

$ Galetes = true ;

si ($ galetes == veritat ) {

?>

<br/>

<P> & nbsp; & nbsp; & nbsp; & nbsp; ----------------------- </ p>

<? Php

echo "& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; galetes fenc ' ;

echo '<br/>' ;

echo '<br/>' ;

echo "& nbsp; & nbsp; & nbsp; & nbsp; ------------------------- ' ;

} un altre {

echo 'No hi ha galetes' ;

}

?>

 

Com podràs comprovar, el codi produeix el mateix resultat. Únicament hem introduït alguns caràcters per millorar la forma en què es veu (recordar que &nbsp seguit d'un punt i coma, sense espai entre tots dos, equival a un espai en blanc en HTML). Compara les similituds i diferències entre els dos codis que hem escrit. En el nostre exemple2 podràs comprovar que hem escrit un fragment de codi php, després un fragment de codi html i després un altre fragment en php. Si et fixes, no hem utilitzat les etiquetes d'obertura i tancament d'html, encara que hagués estat potser més correcte fer-ho, és a dir, escriure:

<Html>

<? Php

$galetes=true ;

if ($galetes==veritat) {

?>

<br/>

<P> & nbsp; & nbsp; & nbsp; & nbsp; -------------------------- </p>

<? Php

echo "& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; galetes fenc ' ;

echo '<br/>' ;

echo '<br/>' ;

echo "&nbsp; & nbsp; & nbsp; & nbsp; -------------------------- ' ;

} Else {

echo 'No hi ha galetes' ;

}

?>

</Html>

Com comprovareu, de vegades els navegadors són capaços d'interpretar el codi encara que faltin algunes etiquetes o contingui alguns errors. Aquesta és una de les qüestions que diferencia HTML de llenguatges de programació en sentit estricte com C, Java o Visual Basic, on la sintaxi és molt més estricta.

En aquest codi més podem assenyalar:

  • Fem servir el codi & nbsp que en HTML significa "un espai". Recorda que HTML omet els espais abans i després d'una cadena de text. Per això hem d'especificar que s'introdueixin espais amb & nbsp.

  • Un salt de línia, que introduïm gràcies a l'etiqueta <br/>, podem escriure-ho tant fora del codi php com dins d'ell. Per introduir-lo dins del PHP, hem de posar-lo dins d'un fet, que és la forma que tenim d'indicar-li a php que doni sortida a aquesta etiqueta com a codi html.

Què passaria si introduíssim una etiqueta html com <br/> directament dins el codi php? Prova-ho i comprovaràs que al navegador es mostra un missatge d'error d'aquest tipus:

Error d'anàlisi: error de sintaxi, inesperat '<' a /home/m/dom/mi.com/public_html/prueba.php en la línia 11

Aquesta és una qüestió que deus tenir en compte: per introduir html has de tancar un bloc php o usar una instrucció trobo dins del bloc php. La instrucció echo ve significant "donar sortida html al que va a continuació".

 

CONDICIONALS IF ... ELSE IF ... ELSE ÉS PHP

L'estructura d'aquestes instruccions ve a ser molt semblant que l'anterior. El seu significat: "Si passa això, fes això, sinó si passa aquesta altra cosa, fes això altre, sinó si passa aquesta altra cosa, fes ...". L'estructura general d'un condicional if else if [else] és:

if (expressió) {

... Sentències 1, 2, 3, ...;

} Else if (Expressió) {

... Sentències A, B, C, ...;

} Else {

... Sentències M, N, O, ...;

}

Aquesta és la síntaxis amb la qual ha de ser usada else if. Un else if s'executarà, sempre que, no hi hagi alguna resposta veritable a l'if o else if anterior; després que s'arriba al final dels else if, i cap ha estat veritable, s'executarà el que està dins el else final.

Poden haver-hi diversos else if, però aquests estan sempre dins d'un if i acabaran amb un else (només un) final.

Escriu aquest codi en un editor com Notepad ++ i guardeu amb un nom de fitxer com ejemplo3.php. A continuació, puja el fitxer al servidor i visualitza el resultat.

<? Php

$test = 33 ;

si ($test>40 ) {

echo "Sí, $test és més gran que 40." ;

} més si ($test> 35 ) {

echo "Sí, $test és més gran que 35." ;

} més si ($ test> 30 ) {

echo "Sí, $test és més gran que 30." ;

} un altre {

echo "No, $test és menor que 40, 35 i 30." ;

}

?>

En aquest cas la resposta seria: Sí, 33 és més gran que 30.

Si el valor de $ test es canvia a 22, la resposta seria: No, 22 és menor que 40, 35 i 30.

 

Operat ternari condicional

Per escriure condicionals l'estructura bàsica de llenguatges com PHP, JavaScript, Java, i altres és la sentència if. Un altre tipus de condicionals com el switch o el else if poden ser reemplaçats per if. Hi ha una altra sintaxi de condicional que s'anomena operador condicional ternari i que s'escriu amb expressions que inclouen una interrogació i dos punts com: a? b: c;

La sintaxi i significat de l'operador condicional ternari (vàlida per a diferents llenguatges, com PHP, JavaScript, Java, etc.) és la següent:

expresiónConValorBooleano? Expressió1: Expressió2;

 

Interpretació : si la expresiónConValorBooleano és certa s'executa la Expressió1, i en cas contrari s'executa la Expressió2.

 

Exemples. Suposem que tenim quatre variables: A=5, B=3, C=-7 i D=5

Expressió

Resultat

A==5? dispara(): espera();

S'executa dispara()

A<B? dispara(): espera();

S'executa espera()

B<C? dispara(): espera();

S'executa espera()

A<B && B> C? Dispara(): espera();

S'executa espera()

A<B && B> C || B == 3? Dispara(): espera ();

S'executa dispara()

A==5? A=20: A=1;

Si A valia 5 ara val 20, cas contrari ara val 1.

B=B==3? B*10: B*100;

Es tracta d'una assignació: si B valia 3, ara B val 10 vegades

el que valia, cas contrari ara B val 100 vegades el que valia.

L'operador ternari pot ser inserit en sentències d'execució on no es permet la inserció de if, per exemple en una operació d'assignació o en la variable de control d'un bucle for. Utilitza l'operador condicional ternari té avantatges i inconvenients.

 

AVANTATGES I INCONVENIENTS DE L'OPERADOR CONDICIONAL TERNARI

A la següent taula resumim els avantatges i inconvenients de l'operador condicional ternari comparant-lo amb el if tradicional.

Condicional 3

Si tradicional

Permet l'escriptura compacta, permetent estalviar escriptura de codi.

Obliga a escriure més sentències per aconseguir el mateix resultat.

Resulta més difícil de llegir, entendre i depurar

Resulta més fàcil de llegir, entendre i depurar

No tots els programadors el fan servir, alguns ni tan sols el coneixen.

Tots els programadors el fan servir i el coneixen.

S'admet en la sintaxi dels llenguatges en llocs on no s'admet la sentència if

No és vàlid en certes ubicacions on només s'admeten expressions, però pot fer-se l'avaluació abans del punt on sigui necessari el condicional.

Criticat per alguns experts, adorat per altres

Ús i acceptació quasi-universal

 

EXEMPLES D'ÚS EN PHP

Escriu aquest codi, desa'l com arxiu php i comprova els resultats d'execució. Raona sobre els resultats obtinguts i tracta d'explicar pas a pas la lògica de tot el que fa el codi.

<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN" "http://www.w3.org/TR/html4/loose.dtd">

<Html> <head> <title> Example aprenderaprogramar.com </ title> <meta charset = "utf-8">

</Head>

<Body> <div id = "capçalera"> <h2> Cursos aprenderaprogramar.com </ h2> <h3> EXEMPLES PHP </ h3> </ div>

<? Php

$A=5; $B=3; $C=-7; $D=5;

$Msg = '';

$A==5? $Msg='A és 5<br/>': $msg='A no es 5<br/>';

$Msg ressò;

$A<$B? $Msg='A és menor que <br/>B': $msg='És Que Un alcalde o igual<br/>B';

$Msg ressò;

$B<$ C? $Msg='B és menor que <br/> C': $msg='B és alcalde o Igual Que <br/> C';

$Msg ressò;

?>

</Body>

</Html>

El resultat esperat és que es mostri per pantalla:

Cursos Aprenderaprogramar.com

Exemples PHP

A és 5

A és major o igual que B

B és més gran o igual que C

 

EXERCICI 1

Executa aquest codi i respon:

a) Quin resultat s'obté per pantalla?

b) Modifica el codi substituint l'operador ternari per if else perquè el resultat obtingut sigui el mateix.

<? Php

$faFred=15;

$Resposta="";

$Temperatura=($faFred<20)? $Resposta= "Fa fred": $resposta = "No fa fred";

echo $resposta;

?>

 

EXERCICI 2

Defineix les variables $ tipus, $ gruix, $ diàmetre i $ marca. Estableix que el tipus sigui "Roda de camió", el gruix 0.33, el diàmetre 1.25 i la marca "Kimashuki". Crea el codi PHP on a través de condicionals if facis la següent comprovació: si el diàmetre és superior a 1.4 ha de mostrar per pantalla el missatge "La roda és per un vehicle gran". Si és menor o igual a 1.4 ha de mostrar per pantalla el missatge "La roda és per a un vehicle petit". En un altre cas, ha de mostrar-se "No existeix una mida de roda vàlid".