Skrátená podmienka if
Na tejto prednáške si ukážeme ešte jeden spôsob zadávania podmienok v jazyku PHP, ktorý sme si doteraz nepredstavili, pretože sa zvykne celkom v praxi používať. Je to na prvý pohľad neprehľadnejšie a mätúce, ale v prípade, že by ste niečo podobné videli alebo aj niečo podobné v inom jazyku, tak aby ste tušili, čo to asi je a čo to asi robí.
Základné použitie podmienky if else už dúfam hravo zvládame, vyzerá to nejako takto:
fotogaleria.php:
…
<div class="div_effect"></div>
<?php
$response = true;
$message = '';
if($response){
$message = 'Data boli uspesne odoslane';
}else{
$message = 'Pri odosielani dat sa vyskytal chyba';
}
echo $message;
?>
…
Ako vidíte v ukážke, na základe hodnoty jednej premennej (reponse, ale mohol by to byť kľudne aj nejaký výsledok – result z funkcie) sa odráža hodnota druhej premennej. Aby sme odlíšili stavy, musíme sa podmienkou pýtať, aká je hodnota prvej premennej a následne priraďujeme nejakú hodnotu do druhej premennej. Ako vidíme, takéto priradenie nám zabralo niekoľko riadkov. Práve na takéto priraďovanie, ktoré je závislé na niečom inom (čo treba oifovať), sa zvykne využívať skrátený tvar podmienky if, ktorý sa dá jednoducho zapísať aj do jedného riadku.
Syntax skrátenej podmienky if je nasledovná, namiesto slov if a else sa používajú špeciálne znaky, ktoré indikujú tieto príkazy. Syntax sa skladá z podmienky, za ktorou nasleduje znak otáznik (?), ktorý indikuje, že sa jedná o podmienku, resp. ako keby sme sa otáznikom pýtali, či podmienka platí. Za otáznikom nasleduje vetva true, čiže rovno príkaz, čo sa má vykonať, ak je podmienka splnená, resp. čo sa má priradiť. Ďalej nasleduje znak dvojbodky (:), za ktorým nasleduje vetva else. V nej sa opäť nachádza príkaz, ktorý sa vykoná, ak podmienka nie je splnená alebo čo sa priradní do premennej v prípade nesplnenia podmienky ukončený bodkočiarkou. Náš prípad vyššie by vyzeral skrátene takto:
fotogaleria.php:
…
$response = true;
$message = '';
$message = $response ? 'Data boli uspesne odoslane' : 'Pri odosielani dat sa vyskytal chyba';
echo $message;
...
Ako vidíte po spustení kódu, skutočne sa nám do premennej message priradila hodnota po splnení podmienky. Vyššie definovaný if, ktorý zabral niekoľko riadkov sme týmto spôsobom zapísali do jedného riadku. Ako náhle teda uvidíte niekde či už pri priraďovaní alebo len tak za niečím otáznik a dvojbodku, indikuje to príkaz if. Ako sme si povedali, tento skrátený tvar sa najčastejšie využíva pri priraďovaní, kde si pomocou neho len odlíšime stavy, ktoré ovplyvňujú priradenie rôznej hodnoty, pretože samotný výraz (celá podmienka) vracia hodnotu.
Samozrejme, dá sa tento tvar zavolať aj len tak v kóde, bez nejakého priraďovania ako celok, ale priraďovanie by sa vykonalo v jednotlivých vetvách, ale nie je to úplne správne:
fotogaleria.php:
…
$message = $response ? 'Data boli uspesne odoslane' : 'Pri odosielani dat sa vyskytal chyba';
echo $message.'<br>';
$response ? $message = 'Data boli uspesne odoslane' : $message = 'Pri odosielani dat sa vyskytal chyba';
echo $message.'<br>';
…
Ako vidíte, v druhom prípade máme v riadku rovno podmienku, na ktorú sa pýtame, či je splnená a následne vo vetvách (true, false) priraďujeme hodnotu do premennej. Je to ale zbytočne dlhšie a aj neprehľadnejšie, prvý spôsob je ten správny, ako sa to zvykne používať.
Tento spôsob zápisu podmienky sa dá samozrejme použiť aj viackrát, to znamená, že vieme pomocou neho zapísať aj viacnásobný if alebo zadať if else a podobne. Predstavme si takúti podmienku:
fotogaleria.php:
…
$response_2 = false;
if($response){
if($response_2){
$message = 'Plati response_1 aj response_2.';
}else{
$message = 'Response 1 plati ale response_2 nie.';
}
}else{
$message = 'Response 1 neplati.';
}
echo $message.'<br>';
…
Pridali sme si ďalšiu premennú, ktorej hodnota je false. Následne sme do predchádzajúceho ifu vložili ďalší if (ďalšiu podmienku), kde sa pýtame na hodnotu druhej premennej. Až podľa toho, aký je jej výsledok, priraďujeme správu do premennej message. Skráteným spôsobom to bude vyzerať tak ako predtým, len do vetvy pri splnenej podmienke (za otáznik) vložíme ďalší skrátený zápis:
fotogaleria.php:
…
$message = $response ? $response_2 ? 'Plati response_1 aj response_2' : 'Response 1 plati ale response_2 nie.' : 'Response 1 neplati.';
…
Ako vidíte, síce to vyzerá troška menej prehľadne, ale po istom čase si na to zvyknete a zistíte, že to je takto rýchlejšie a praktickejšie. Vyskúšajte si pomeniť hodnoty premenných response 1 a 2, aby ste videli, že to naozaj funguje. Pri takomto zápise, resp. pri čítaní takéhoto zápisu musíte brať na vedomie, že ak sa napríklad pozriete na koniec tohto príkazu, kde sa niečo priraďuje dvakrát za sebou vo false vetve (za dvojbodkou – sú tam dve po sebe), tak ideme smerom doľava. Čiže prvá dvojbodka patrí k podmienke za prvým otáznikom a tú druhá dvojbodka (smerom doprava) patrí k druhému otázniku smerom doľava (k druhej podmienke).