Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 PHP - Как и къде да бъдат използвани контролни структури
  1. PHP - Как и къде да бъдат използвани контролни структури
bgspace
     
Автор  bgspace (08.08.2008 13:15)  съобщение до автора
Погледнат  1165 пъти  добави към любими
Оценка  добави коментар
Гласове  3  изпрати на приятел
Коментари  (0)  абонирай се за PHP
    Страница 1 / 1

 



if
Конструкцията if (ако) е едно от най-важните свойства на много езици, включително и на PHP. Тя позволява условно изпълнение на части от кода. PHP предоставя структура if, подобна на тази в C:
 CODE
1
2
3
if(условие){
// Конструции от код  който се изпълняват ако условието е вярно
}
Kонструкциите if могат да бъдат вмествани безкраен брой пъти в други конструкции if, което ви дава пълна гъвкавост за условното изпълнение на различни части от вашата програма.
  CODE
1
2
3
4
5
6
7
8
9
<?php
if(условие){
   
if(условие){
       
if(ословие){
..........
}
}
}

?>

else

В много случаи ще искате да изпълните една инструкция ако дадено условие е изпълнено и друга инструкция, ако условието не е изпълнено. Точно за това служи else (иначе). else разширява конструкцията if, като изпълнява инструкция в случай, че изразът в конструкцията if се изчисли на FALSE. Например, следният код ще изведе a е по-голямо от b ако $a е по-голяма от $b, или a НЕ е по-голямо от b - в противен случай:

  CODE
1
2
3
4
5
6
7
<?php
if ($a > $b) {
   
echo "a е по-голямо от b";
} else {
   
echo "a НЕ е по-голямо от b";
}
?>

Може да имате множество конструкции  if но само една else
Троен оператор е  съкратен вариант на конструцията if-else
Пример:
 (условие ? "изпълнява се ако условието е true":" изпълнява се ако условието е false");

elseif

elseif, както подсказва и името й, е комбинация от if и else. Също както else, тя разширява конструкцията if така, че да изпълни различна инструкция, в случай че първоначалният израз if се е изчислил на FALSE. За разлика от else обаче тя ще изпълни този алтернативен израз само ако условният израз elseif се изчислява на TRUE. Например, следният код ще изведе a е по-голямо от b, a е равно на b или a е по-малко от b:

 CODE
1
2
3
4
5
6
7
8
9
<?php
if ($a > $b) {
   
echo "a е по-голямо от b";
} elseif ($a == $b) {
   
echo "a е равно на b";
} else {
   
echo "a е по-малко от b";
}
?>

Конструкцията elseif се изпълнява само ако предшестващият израз if и всички предшестващи изрази elseif се изчислят на FALSE и текущият израз elseif се е изчислил на TRUE.


switch

Kонструкцията switch (пренасочвам) наподобява поредица от конструкции IF върху един и същи израз. В много случаи, ще искате да сравните една и съща променлива (или израз) с много различни стойности и да изпълните различно парче код, в зависимост от това на коя стойност отговаря. Точно за това служи конструкцията switch.

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
if ($i == 0) {
   
echo "i е равно на 0";
} elseif ($i == 1) {
   
echo "i е равно на 1";
} elseif ($i == 2) {
   
echo "i е равно на 2";
}

switch ($i) {
case 0:
   
echo "i е равно на 0";
   
break;
case 1:
   
echo "i е равно на 1";
   
break;
case 2:
   
echo "i е равно на 2";
   
break;
}
?>

Могат също  да  бъдат  изпълнени и няколко инструкции case

 CODE
1
2
3
4
5
6
7
<?php
 swtich
(израз){
   
case "случай":
   
case "случай":
   
break;
}
?>

Можете също  да влагате  конструкциите switch.
Пример :
CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
switch(израз){
   
case "случай":
   
switch(израз){
   
case "случай":
break;
default:
   
case "случай":
break;
}
break;
case "случай":
break;
default:
break;
}
?>


for

Циклите for (за) са най-сложния цикъл в PHP. Той се изпълнява  по същия начин като нековия еквивалент в C. Синтаксисът на цикъл for е:

for (expr1; expr2; expr3)
  statement
Първият израз (expr1) се изчислява (изпълнява) безусловно веднъж в началото на цикъла.

expr2 се изчислява в началото на всяка итерация. Ако се изчисли на TRUE, цикълът продължава и вложените команди се изпълняват. Ако се изчисли на FALSE, изпълнението на цикъла свършва.

expr3 се изчислява (изпълнява) в края на всяка итерация.


while

Циклите while (докато) са най-простия тип цикъл в PHP. Те работят по същия начин както техния еквивалент в C. Основната форма на конструкцията while е:

 CODE
1
2
3
4
5
6
7
8
<?php
$i = 1;
while ($i <= 10) {
   
echo $i++; /* отпечатаната стойност ще бъде
                    $i преди инкрементацията
                    (пост-инкрементация) *
/
}
?>

do-while

Циклите do-while (прави-докато) са подобни на циклите while , с тази разлика, че вместо в началото, изразът за истинност се проверява в края на всяка итерация. Основната разлика от обикновените цикли while е, че първата итерация на цикъл do-while  със сигурност ще се изпълни (условието се проверява единствено в края на итерацията), докато при циклите while не е задължително да се изпълни (условието се проверява в началото на всяка итерация, така че ако се изчисли на FALSE от самото начало, цикълът ще завърши незабавно).

 CODE
1
2
3
4
5
6
<?php
$i = 0;
do {
   
echo $i;
} while ($i > 0);
?>


foreach

Конструкция foreach  (за всеки), е много наподобяваща тази в Perl и в някои други езици. Тя предоставя лесен начин за обхождане на масиви.

 CODE
1
2
3
4
5
6
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
  
print  $value ;
}
?>

Php  предлага голямо разнообразие от контролни структури поради причината, че в  зависимост от  случайте в  които се използват някой от тях са по ефективни в определени ситуации и е по удачно да бъдат изпозвани. 
Кога трябва да изпозваме  if else конструкции и кога switch.
 

 За да се избегнат грешки, е важно да се разбере как се изпълнява конструкцията switch. Тя се изпълнява ред по ред (всъщност, инструкция по инструкция). В началото не се изпълнява никакъв код. Чак когато се срещне инструкцията case (случай) със стойност, която да съвпада със стойността на израза switch, PHP започва да изпълнява инструкциите. PHP продължава да ги изпълнява докато не достигне края на switch блока, или до първия път, където види инструкция break. Ако не напишете инструкция break накрая на списъка с инструкции за текущия случай (case), PHP ще продължи с изпълнението на инструкциите в следващия случай.

В конструкция switch условието се изчислява само веднъж и резултатът се сравнява с всяка клауза case. При elseif - условието се изчислява повторно. Ако условието ви е по-сложно от просто сравняване и/или е в тежък цикъл, switch ще бъде по-бърза.

Кога трябва да се  използва for, while и foreach.

Изпозването на цикъл  while()  е подходящо  когато имаме неизвестен  брой повторения. За това когато не знем колко на брой повторения ще имаме може да изпозваме  while(), но може и да се използва и цикъл  for но  без параметри в  тялото.

Пример  :
 CODE
1
2
3
4
5
6
7
8
9
10
11
<?php
while($row = mysql_fetch_array($result)){
    //
$row   
}
?>
<?
php
$array = array(1,2,3,4,5,6,7);
for($i=0;$i<count($array);$i++){
   
print $array[$i]   
}

?>

Примерът по горе  може да бъде изпълнен по още няколко начина. Посредством с цикъл :

 CODE
1
2
3
while(list(,$val)=each($array)) {
   
print $val;
}
а  най- добрия вариант в случая е изпозването на 
 CODE
1
2
3
4
foreach($array as $val){
   
print $val;
}
unset($val); //изчистване на променливата.

Когато  трябва  да обходим един двумерен масив с един цикъл  (без влагане ) най – добрия  начин е да изпозваме цикъл foreach() :

Пример:
CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
$db = array(
 
"1"=>array(
    
"id"=>"11"
     ,
"loginName"=>"ime_1"
     ,
"userPwd"=>"1234"
 
)
 ,
array(
    
"id"=>"12"
     ,
"loginName"=>"ime_2"
     ,
"userPwd"=>"dewedw"
 
)
 ,
array(
    
"id"=>"13"
     ,
"loginName"=>"ime_3"
     ,
"userPwd"=>"fedfsd"
 
)
 ,
array(
    
"id"=>"14"
     ,
"loginName"=>"ime_4"
     ,
"userPwd"=>"2222"
 
)
)
;

foreach($db as $vals){
   
print $vals["id"]."  ".$vals["loginName"]."  ".$vals["userPwd"]."<bR>";
}
unset($vals);
reset($db);
while(list($key,$vals)=each($db)){
       
print $vals["id"]."  ".$vals["loginName"]."  ".$vals["userPwd"]."<bR>";
}
?>

Цикълът foreach() е  много удобен за обработката на масиви но има някой недостатъци които трябва да бъдат показани.
 
Примери:
 CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$arr = array('i','v','a','n');
       
foreach ($arr as $v){
           
if(implode("",$arr)=="ivan") $arr[]='a';
           
print $v;
       
}
// грешка отпечатва  ivan  а не  ivana
        array_pop
($arr);
       
reset($arr);
       
print "<bR><br>";
       
while(list(,$v)=each($arr)){
           
if(implode("",$arr)=="ivan") $arr[]='a';
           
print $v;
       
}
/ правилно отпечатва
ivana

Грешката която възниква в foreach е, че  той работи с копие на  масива на не с оригинала. Когато извършваме някаква маниполация върху елементите на масива вътре в цикъла не е удачнода го изполваме  foreach . Това условие не важи в случайте в случайте който  масива е  указан с референция, в  ругите  случаи се  работи с копие от масива.

 CODE
1
2
3
4
5
6
7
8
9
10
11
$arr = array(1,2,3,4,55);
       
foreach ($arr as $val){
           
print "foreach val : ".$val."<br>";
       
}
       
print "output foreach : ".$val."<bR>";
       
unset($val);
       
reset($arr);
       
while(list(,$val)=each($arr)){
           
print "while val : ".$val."<bR>";
       
}
       
print "output while : ".$val."<bR>";

Съвет : Никога не забравяйте да изчиствате $val след изход от цикъл foreach .
Темата за съжаление  е прекълено голяма и  не могат да бъдат засегнати всички варианти  на работа. Тук съм дал само  някой от  вариантите как точнода бъдат изпозвани правилно контрлните структури   



   


Ключови думи: PHP контролни структури switch else if foreach for case


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008