RkBlog

Hardware, programming and astronomy tutorials and reviews.

Instrukcje warunkowe

Podstawą wszystkich praktycznie skryptów są instrukcje warunkowe takie jak IF, SWITCH czy WHILE. Upraszczając - dzięki nim "coś" się stanie gdy podany warunek będzie spełniony. Oto opis poszczególnych instrukcji warunkowych:

Instrukcja IF

Najprostsza instrukcja warunkowa o budowie:
IF (WARUNEK)
	{
	//kod który ma się wykonać przy spełnieniu warunku
	}
Instrukcję tę możemy sobie tłumaczyć tak: Jeżeli (IF) warunek jest spełniony to ({}). Oto przykład kodu PHP z taką instrukcją:
<?php

$liczba = 3;

IF ($liczba == 3)
	{
	echo 'Podana liczba to 3';	
	}
Jeżeli zmienna liczba ma wartość równą 3 (znak "=" to przypisanie wartości, "==" to "znak" równości) to wyświetl tekst "Podana liczba to 3". Instrukcję można rozbudować dodając kilka nowych elementów:
<?php

IF ($liczba == 3)
	{
	echo 'Podana liczba to 3';	
	}
else
	{
	echo 'Podano inną liczbę niż 3';
	}
Klausula "else" określa co ma się stać gdy warunek nie zostanie spełniony. Jeżeli nie potrzebujemy nie musimy dawać "else" do instrukcji. Jeżeli natomiast chcemy np. zrobić coś gdy $liczba ma wartość 1 i coś innego gdy ma wartość np. 3 to możemy jeszcze bardziej to rozbudować:
<?php

IF ($liczba == 1)
	{
	echo 'foo';
	}
elseIF ($liczba == 2)
	{
	echo 'foo';
	}
elseIF ($liczba == 3)
	{
	echo 'foo';
	}
elseIF ($liczba == 4)
	{
	echo 'foo';
	}
else
	{
	echo 'Jesteśmy poza zakresem';
	}
elseIF tłumaczymy jako "w przeciwnym wypadku jeżeli" tj. Jeżeli (IF) $liczba == 1 to zrób foo :) w przeciwnym wypadku jeżeli $liczba == 2 to zrób cośtam itd. Kolejnym rozwinięcie są warunki. Za jednym zamachem możemy określić kilka warunków:
<?php

$liczba = 'foo';
IF (isset($liczba) and is_numeric($liczba))
	{
	echo 'Zmienna liczba przechowuje wartość liczbową';	
	}
elseIF(isset($liczba) and !is_numeric($liczba))
	{
	echo 'Zmienna liczba nie przechowuje liczby';
	}
else
	{
	echo 'Zmienna liczba nie istnieje';
	}
Tutaj mamy już kilka nowości. Funkcja isset zwróci wartość prawda jeżeli podana zmienna istnieje. Funkcja is_numeric zwróci wartość prawda jeżeli podana zmienna przechowuje wartość liczbową. Operator "and" oznacza "oraz" czyli pierwszy i drugi parametr muszą być spełnione. Tak więc mamy: Jeżeli $liczba istnieje i (and) jest liczbą to "Zmienna liczba przechowuje wartość liczbową" w przeciwnym wypadku jeżeli $liczba istnieje i nie jest liczbą "Zmienna liczba nie przechowuje liczby", jeżeli i ten warunek nie spełniony to oznacza że $liczba nie istnieje.
UWAGA: znak ! przed is_numeric oznacza "zaprzeczenie", patrz ściągawka:
$x == $y : znak równości (czy zmienne są równą)
$x != $y : znak różności (czy zmienne są różne, dla funkcji zwracających wartość prawda/fałsz ! jest przed ich nazwą)
$x > $ y : czy $x jest większe od $y (tak samo < oraz <= oznacza większe równe, >= mniejsze równe)
"Przeciwieństwem" do AND jest OR czyli "lub".
<?php

IF ($liczba == 3 or !is_numeric($liczba))
	{
	echo 'Zmienna Liczba ma wartość 3 lub nie jest liczbą';	
	}
Instrukcja wyświetli "Zmienna Liczba ma wartość 3 lub nie jest liczbą" gdy jeden z warunków zostanie spełniony.

Instrukcja SWITCH - CASE - BREAK

Duża ilość elseIF w instrukcji zwalnie działanie skryptu i nie wygląda za dobrze. Możemy to "naprawić" stosując inne wyrażenie warunkowe:
<?php

$liczba = 3;

switch ($liczba)
	{
	case 1:
	echo 'mamy 1';
	break;
	
	case 2:
	echo 'mamy 2';
	break;
	
	case 3:
	echo 'mamy 3';
	break;
	
	case 4:
	echo 'mamy 4';
	break;

	case 'foo':
	echo 'mamy foo';
	break;
	
	default:
	echo 'Mamy coś innego';
	}
Jest to "inna" forma IFa z kilkoma elseIF. Instrukcja zaczyna się od "switch ($ZMIENNA)". Następnie w nawiasie {} podajemy przypadki (case) wartości zmiennej. Jeżeli zmienna ma taką wartość to wykonany zostanie kod przypisany do tej wartości. break; kończy wykonywanie instrukcji. default: to odpowiednik else. Kod przypisany pod default wykona się gdy żaden z listy warunków nie zostanie spełniony.

Pętla FOR

Pętla for wykona określoną ilość razy przypisany jej kod aż warunek pętli przestanie być prawdziwy:
<?php

for($count = 1; $count <= 10; $count++)
	{
	echo 'klonujemy<br />';
	}
Mamy: for(wartość początkowa; wartości dla których wykonywać; postęp). Zacznij pisać "klonujemy" gdy $count przyjmie wartość 1 i pisz to aż $count przestanie być mniejsza/równa 10; zwiększa wartość $count o jeden. Należy unikać długich pętli gdyż długo się wykonują. Jeżeli po napisaniu pętli kod przypisany jej ciągle się wykonuje to znaczy że źle zdefiniowaliśmy warunek i pętla będzie działać w nieskończoność (zazwyczaj aż przekroczony zostanie maksymalny czas wykonywania skryptu).

Pętla WHILE

Pętla WHILE (i DO WHILE) są prostszą wersą pętli for.
<?php

while ($count <= 10)
	{
	$count++;
	echo 'klonujemy<br />';
	}
Jako parametr podajemy tylko warunek przy którym wykonywać kod. Coś co zmieni warunek wykonywania kodu na fałsz ($count++) musi być umieszczone poza "parametrami" pętli, np. w kodzie przypisanym do wykonania.
RkBlog

Podstawy PHP, 14 July 2008, Piotr Maliński

Comment article