Je tato žena mladší 25 let a zároveň má milion. Jak to napsat v PHP.
V minulých dílech, jsme si probrali problematiku podmínek. Uvedl jsem pouze základní možnost a to že podmínka je jediná. V tomto případě podmínka nabývá hodnoty PRAVDA (true) anebo NEPRAVDA (false). Níže uvedený příklad nám zjistí zdali proměnná $a podmínku ($ak<0) splňuje (TRUE) resp. nesplňuje.
$a=3;
if ($a<0)
{ print "menší než nula";
}
?>
Často se však potřebujeme ohodnotit najednou více proměnných, kupříkladu je osoba vybraná z DB (databáze) žena a je mladší 25 let, pokud ano tato žena nás zajímá. V tomto případě můžeme zvolit proměnné $je_zena která nabývá TRUE nebo FALSE (1 nebo 0) a $vek který bude nabývat hodnoty věku dané osoby. Všechny údaje vytáhneme většinou někde z databáze (to později) ale pro modelovaný případ, budeme tyto údaje mít k dispozici.
<?
$je_zena=true;
$vek=22;
if (($vek<25)and($je_zena))
{ print "tato žena vyhovuje"; } else {print "nevyhovuje";};
?>
pokud bychom chtěli zjisti, zdali má méně než 25 nebo 25let napíšeme operátor menší-rovno (<=) if ($vek<=25), analogicky existuje (>=).
a | b | not a | a and b | a or b | a xor b |
1 | 1 | 0 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 1 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 0 | 0 |
česky | negace a | a a b | a nebo b | a nebo b ale ne současně | |
příklad v PHP | ! $a | $a and $b | $a or $b | $a xor $b |
výrok a může být třeba podmínka (X>5), pokud je podmínka splněna a je rovno TRUE (v tabulce je to zkráceně jednička) resp. pokud není splněna je a rovno nule (false), výrok b může být opět nějaký jiný logický výrok. Tabulka ukazuje možnosti co se stane, když použijeme kupříkladu a or b, to znamená že bud výrok a je pravdivý, nebo výrok b a nebo oba. Formule můžou být i složitější ((a and b) or (c xor a)), postupně zde vyhodnotíme formule v závorkách a potom obě závorky dohromady. Pokud bude zájem, uvedu více teorie z oblasti výrokové logiky.
Rozšíříme si úvodní příklad, a bude nás zajímat zdali má žena méně jak 25 let a nebo zdali má aspoň milion na kontě.
<?
$je_zena=true;
$vek=22;
$konto=1500000; if ((($vek<25) or ($konto>=1000000))and($je_zena))
{ print "<br>tato žena vyhovuje - má milion nebo je mladší 25let, nebo oboji"; } else {print "<br>nevyhovuje";};
?>
No jo, ale jak nás může zajímat žena mladší 25 let s milionem na účtu (to ji asi nebudeme zajímat my). Takže buď bude mladší 25let nebo bude mít milión a více, ale ne oboji. Použijeme místo or operátor xor.
<?
$je_zena=true;
$vek=22;
$konto=1500000; if ((($vek<25) xor ($konto>=1000000))and ($je_zena))
{ print "<br>tato žena vyhovuje - má milion nebo je mladší 25let, ne však oboji"; } else {print "<br>nevyhovuje";};
?>
Zkuste v posledním příkladu věk zvýšit na více jak 25, potom konto méně jak na milion a pak vše dohromady.