PHPPamokos.lt


6. Sąlygos sakiniai: IF...ELSE

Pakankamai dažnai programa turi elgtis vienaip arba kitaip, priklausomai nuo kažkokiu sąlygų. Kalbant paprasčiau: jeigu [kažkas] - tai reikia atlikti vieną veiksmą, priešingu atveju - kitą veiksmą. Šiame skyrelyje sužinosime, kaip visa tai aprašoma PHP kalboje.

IF .. ELSE

Sąlygai aprašyti skirtas paprasčiausias angliškas žodelis if. Bendro pavidalo sąlygos sakinys atrodo taip:

if (sąlyga) {
// atliekamas veiksmas 1
} else {
// atliekamas veiksmas 2
}

Konkretus pavyzdys:

$line = "Labas rytas, labas rytas ir dar kartą labas rytas";
$line2 = "Labas rytas tik du kartus";
$length = strlen($line);
if ($length > 20) {
  echo "eilutė ilgesnė už 20 simbolių (".$length.")";
} else {
  echo "eilutė trumpesnė už 20 simbolių (".$length.")";
}

Kaip matote, sąlyga yra nurodoma skliaustuose, ir jei ji teisinga, tada vykdomas pirmasis veiksmų blokas, o po žodelio else rašomi veiksmai, kuriuos reikia atlikti priešingu atveju, jei sąlyga netenkinama. ELSE blokas šiaip yra nebūtinas. Kitaip tariant, jei sąlygą patenkinta, tai vykdyti veiksmą, o priešingu atveju nedaryti nieko, tai tuo atveju ELSE blokas yra visai nerašomas.

Kiekvienas veiksmų blokas yra rašomas tarp figūrinių skliaustų { }. Jeigu bloke yra tik vienas sakinys, tada tokie skliaustai nėra būtini:

if ($length > 20) echo "Ilgis didesnis už 20";

Bet dėl tvarkingumo rekomenduoju skliaustus visada rašyti net ir vienam sakiniui, nes taip bus lengviau perskaityti kodą ir atskirti jo dalis, ypač jei sąlygos sakinys yra gana sudėtingas.

Sudėtingesniu atveju gali būti keletas veiksmų blokų, t.y. daugiau negu du. Tada visa konstrukcija atrodo taip:

if ($points == 1) {
  echo "Baudos metimas";
} elseif ($points == 2) {
  echo "Dvitaškis";
} elseif ($points == 3) {
  echo "Tritaškis";
} else {
  echo "Nepataikė";
}

<div class="section_divider"> 

Kokios gali būti sąlygos

Atskirai reikia išnagrinėti, kokie patikrinimai gali būti tarp skliaustų ( ) sąlygos bloke. Jau matėte du variantus, kuriuose palyginami skaičiai:

if ($length > 20) // ar kintamasis $ilgis didesnis už 20
if ($taskai == 1) // ar kintamasis $taskai lygus 1

Atkreipkite dėmesį, kad palyginimui rašomas ne vienas lygybės ženklas, o DU lygybės ženklai. Vienas ženklas reiškia reikšmės priskyrimą. Nepainiokite šių dviejų dalykų, nes tai yra viena iš dažniausių pradedančiųjų programuotojų klaidų, ir ją labai sunku po to pastebėti ar sugaudyti, nes programa įvykdoma, rezultatai neteisingi, ir galiausiai sėdi kelias valandas, ieškodamas klaidos, o po to reikia rautis plaukus, nes netikslumą lėmė tiesiog parašytas vienas lygybės ženklas vietoje dviejų.

Sąlygos gali būti ir sudėtingesnės, susidedančios iš dviejų ar daugiau atskirų sąlygų arba neiginių. Pavyzdžiai:

if ($ilgis == 3 && $plotis == 4) { echo "statusis trikampis"; }
// operatorius && - "IR"
if ($numeris == 1 || $numeris == 2) { echo "vienas arba du"; }
// operatorius || - "ARBA"
if ($numeris != 1) { echo "nelygu vienetui"; }
// operatorius != - "NELYGU"
if ($numeris >= 1) { echo "daugiau arba lygu 1"; }
// operatorius >= - "DAUGIAU ARBA LYGU"

Taip pat atskirai reikia paminėti dar vieną operatorių - griežtą lygybę arba trigubą lygybę ===. Jos pagalba galima patikrinti ne tik, ar kintamieji yra lygūs bet ar jie to paties tipo - skaičiai, eilutės ir kt. Pavyzdys:

$ilgis = 3;
if ($ilgis === 3) { echo "lygu"; }
// kintamasis $ilgis yra skaičius
$ilgis = "3";
if ($ilgis === 3) { echo "lygu"; }
// kintamasis $ilgis nėra skaičius, sąlyga nebus patenkinama
 

Ternary IF

Yra dar vienas, trumpesnis būdas užrašyti IF sakinį - jei yra tik viena sąlyga, ir pagal jos rezultatą reikia vieną ar kitą reikšmę išvesti į naršyklę ar priskirti kintamajam. Tada sąlygą įrašome į skliaustus, jei ji teisinga veiksmą rašome po klaustuko, o jei ne - po dvitaškio. Pavyzdys:

echo ($ilgis > 5) ? 'ilgas' : 'nelabai';
$tekstas = ($ilgis > 5) ? 'ilgas' : 'nelabai';

Toks užrašymas yra tiesiog sutrumpinimas nuo šių:

if ($ilgis > 5) { echo 'ilgas'; } else { echo 'nelabai'; }
if ($ilgis > 5) { $tekstas='ilgas'; } else { $tekstas='nelabai'; }

Toks trumpesnis užrašymas kartais dar vadinamas ternary operator.

 

Operatorius SWITCH .. CASE

Įsivaizduokite, kad jums reikia išrašyti 10 skirtingų variantų su sąlygos sakiniais. Taip, tai galima padaryti, rašant ilgą IF.. ELSE struktūrą:

if ($vieta == 1) { echo "Pirma vieta"; }
else if ($vieta == 2) { echo "Antra vieta"; }
else if ($vieta == 3) { echo "Trečia vieta"; }
// ... dar kitos sąlygos
else if ($vieta == 10) { echo "Dešimta vieta"; }
else { echo "Nebaigė trasos"; }

Tačiau yra ir patogesnis būdas. Tokiam išvardinimo procesui naudojamas operatorius switch.. case. Jo pagalba galima tiesiog išvardinti kiekvieną galimą reikšmę, ir atskirai apdoroti kiekvieną iš jų. Šio operatoriaus užrašymas atrodo taip:

switch ($vieta) {
  case 1: echo "Pirma vieta"; break;
  case 2: echo "Antra vieta"; break;
  case 3: echo "Trečia vieta"; break;
  // ... dar kitos sąlygos
  case 10: echo "Ketvirta vieta"; break;
  default: echo "Nebaigė trasos"; break;
}

Kaip matote, skliausteliuose parašomas kintamasis arba kitoks reiškinys, o tada kiekvienoje case eilutėje nurodoma jo reikšmė, ir po dvitaškio - kokie veiksmai turi būti atliekami, esant tai reikšmei. Veiksmų gali būti daugiau negu vienas, ir jie turi pasibaigti žodeliu break;. Taip pat atkreipkite dėmesį į default: tas blokas bus vykdomas tada, jeigu kintamojo reikšmė nesutaps nei su vienu iš išvardintų skaičių.



(c) 2015-2018. Visais klausimais kreipkitės povilas@laraveldaily.com