Време е да се запознаем с истинските инструменти на езика РНР, които присъстват във всеки език за програмиране. Това са условните оператори и циклите. Но преди да започнем с тях е добре да разгледаме операторите за сравнение. Те са стандартни за повечето езици, така че ако досега сте програмирали няма да са проблем.
a == b
/* сравнява стойностите на а и b за еквивалентност */
a => b
/* сравнява дали а е по-голямо или равно на b.
може да се използва и строго неравенство(само >) */
a != b
/* сравнява стойностите на а и b за еквивалентност,
като резултатът е истина ако не са еквивалентни(а различно от b) */
a && b
/* логическо "и" - връща истина само ако едновременно и двете условия са изпълнени*/
a || b
/* логическо "или" - връща лъжа само ако и двете условия са лъжа едновременно*/
След тази кратка интродукция преминаваме към понятието условен оператор. В програмирането често се налага да сравняваме стойности и да правим различни действия спрямо отговора, който сме получили. Например ако в променливата $cost има стойност по-малка или равна на нула, трябва да изведем грешка, в противен случай трябва да продължим. Форматът на условния оператор в РНР е :
if (условие)
оператори1;
else
оператори2;
Условието, което проверяваме трябва да е логическо, т.е. трябва да има стойност лъжа или истина. За помощ идват и ключовите думи TRUE и FALSE, т.е. вярно и невярно. Ако условието е истина се изпълняват първите оператори, а ако не е - вторите. Нека направим примера, описан по-горе.
if ($cost <= 0)
echo "Цената не може да бъде отрицателна стойност или нула";
else
echo "Сумата, която трябва да платите е $cost";
Този код ще изведе грешка ако стойността на променливата $cost е отрицателна или ще изведе самата стойност на $cost. Ако искате да извършите повече от една операция ползвате къдрави скоби:
if ($cost <= 0)
{
echo '';
echo "Цената не може да бъде отрицателна стойност или нула";
echo "";
}
Има една разводиност на условния оператор и форматът и е следния :
(условие) ? стойност1 : стойност2 ;
Този вид условен оператор връща стойност. Това е стойността изпълнила се в зависимост от условието. Т.е. ако е истина ще върне стойност1, а ако не стойност2. Пример:
$cost = ($cost <= 0) ? 1 : $cost;
След изпълнението на този код, ако в променливата $cost има стойност по-малка или равна на 0, то в нея ще се запише 1, а ако не е така, няма да има промяна.
Нека сега разгледаме и някой полезни функции, свързани с условния оператор:
is_integer($value) - проверява дали стойността на променливата $value е цяло число
is_float($value) - проверява дали стойността на променливата $value е дробно число
is_array($value) - проверява дали стойността на променливата $value е масив
is_string($value) - проверява дали стойността на променливата $value е символен низ
Тези функции връщат истина ако условието е изпълнено и лъжа, ако не е. Идеални са за използване в условни оператори. Да кажем за предишния пример проверявахме дали $cost е по-малка или равна на нула, но ако това е променлива, директно взета от потребителя, тя може да не е число изобщо и тогава проверките винаги ще дават истина. Ето защо трябва да преработим условието на:
if (is_float($cost) && $cost <= 0)
Така ще проверим дали променливата е дробно число(ако е цяло също ще се върне истина) и едновременно с това дали не е по-малко или равно на 0.
Тук искам да отбележа, че ако не сте програмирали до сега, може би някой понятия не са ви ясни и създават трудност. Предполагам това е функция и масив. Това ще са темите на следващите два урока, като за сега приемете, че функцията извършва дадена операция и връща стойност(може и да изисква такава), а масивът е съвкупност от променливи. Нека за сега се съсредоточим върху важните операции, които могат да се извършват с РНР и след това ще стигнем и до по-сложната част.
Време е да се запознаем с циклите. Това е другата конструкция, без която програмирането не е програмиране. Да кажем, искате да увеличавате с единица стойността на дадена променлива докато не стане по-голяма от дадена константа. Да пишете хиляда "ако то" конструкции е нелепо. В такива моменти идват на помощ циклите. Нека разгледаме първия вид:
while(условие)
оператори;
Докато условието е изпълнено операторите ще се повтарят отново и отново. Тоест нашия примерен вариант може да стане по следния начин:
define(N, 100);
$var = 0;
while($var <= N)
$var = $var + 1;
Т.е. дефинираме си константа N и докато променливата $var е по-малка или равна на константата, тя ще се увеличава с единица. Разбира се след изпълнението на този сегмент код, в $var ще е записано числото 100. Ако искате да се изпълни повече от един оператор, ползвате къдрави скоби, както и при if. По-принцип те обозначават група от оператори, които трябва да се изпълнят заедно и могат да се използват при всякакви конструкции. Следващият цикъл е доста често използван :
for ( оператор1; условие; оператор 2)
оператори;
Тук синтаксиса изглежда сложно, но в същност не е. Оператор1 е начално инициализиране. Той се изпълнява веднъж за целия цикъл. Оператор2 се изпълнява всеки път преди поредното превъртане на цикъла. Когато условието е истина се изпълняват оператори. Нека направим предния пример за да изясним нещта:
define(N, 100);
for ($var = 0; $var <= N; $var ++);
Първо искам да уточня, че оператора ++ увеличава стойността на променливата с единица. Всъщност тук нямаме оператори. В оператор2 на всяко извикване на цикъла стойността на $var се увеличава с единица. Когато нямаме оператори можем да ползваме само ;. Този цикъл е толкова често използван, тъй като освен изпълнението на операторите, може лесно да се следи и брояч на повторенията на цикъла. Приложение ще намерим най-вече, когато използваме масиви.
Как се прекъсва цикъл?
Понякога може да ви се наложи да прекъснете изпълението на цикъл, ако някакво събитие се случи преждевременно. Това става с ключовата дума break;
Пример:
define(N, 100);
for ($var = 0; ; $var ++);
if ($var <= N)
break;
Това е същият алгоритъм като горе, но условието е празно - тоест няма условие, а цикълът ще се изпълнява докато if условието не стане истина. Когато пишете оператор в оператор, е добре да слагате интервали, точно както при алгоритъма горе. По този начин си осигурявате четливост на кода.
Нека разгледаме още една разновидност на условния оператор, след като сме се запознали с циклите. Това, което трябва да знаем е конструкцията switch. Тя е много полезна, когато трябва да се извърши действие, в зависимост от стойността на дадена променлива. За сравнение if ни усигорява само два изхода. Разбира се, винаги можем да направим вложена конструкция от типа:
if (условие1)
оператори1;
else if (условие2)
оператори2;
else
оператори3;
Тоест, ако е изпълнено условие1 се преминава към оператори1, ако не е изпълнено условие1, но пък е изпълнено условие 2 преминаваме към оператори2. Ако нито едно от двете не е изпълнено следват оператори3. Това е често срещано, но ако трябва да се направят десет такива влагания, кода става много сложен.
Затова ползваме:
switch (променлива) {
case стойност 1 : оператори1; break;
case стойност 2 : оператори2; break;
case стойност n : оператори n; break;
default: оператори по подразбиране;
}
Ако се загледате внимателно няма да имате нужда от разяснение на начина на работа. Всъщност този оператор проверява дали променливата има стойност, която е изброена с case. Ако да изпълнява конкретните оператори. Ако няма съвпадение никъде, се изпълняват операторите по подразбиране. Тук може да не използвате къдрави скоби, тъй като ключовата дума break указва край на операторите. Синтаксисът е с тази ключова дума, заради конкретен случай. Да кажем, че операторите ви са така структурирани, че ако е изпълнена някаква стойност, трябва да се премине през всички оператори под нея. Т.е. ако е изпълнено първото условие да се изпълнят всички оператори от едно до n. Това става много лесно - просто премахвате ключовата дума break от всеки ред и решението е готово.
Преди да завършим този урок, нека ви кажа няколко оператора, създадени в езика С и взаимствани тук, които са предимно за краткост на кода. Да кажем искате да увеличите стойността на една целочислена променлива с едно. Има 3 начина да постигнете това. Първият и вторият са:
$var = $var + 1;
$var ++;
Третият начин е съкартен вариант на първия:
$var += 1;
По същия начин има следните оператори: -=, *=, /=, .=(за добавяне към символен низ)
Това са най-важните конструкции във всеки език за програмиране и съответно най-често използваните. Упражнете се да направите калкулатор с простите операции. Използвайте POST и GET метод, за да видите разликата. Друга много популярна задача за упражнение е да изчислите n! (умножение на ислата от едно
до n).