Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Конструкция switch-case или elseif лучше?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: что подходит для перебора логических вариантов?
Конструктор
Отправлено: 05 Апреля, 2011 - 20:01:54
Post Id



Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010  


Помог: 1 раз(а)




Всем добрый утро..
Есть 2 вопроса:
1. Почему при $d=0 , скрипт выводит следующее-->
Дискриминант равен 0
действительных решений нет
x1=-2
x2=-2
почему он думает что $d<0?

2. И еще вопрос в чем отличие этой конструкции switch() case:..
от elseif?
В каких случаях что лучше использоваь?

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $a = 2;
  3. $b = 8;
  4. $c = 5;
  5. //$d = $b * $b - 4 * $a * $c;
  6. $d=0;
  7.  
  8. echo "Дискриминант равен $d <br>";
  9.  
  10. switch ($d)
  11. {
  12.         case ($d<0): echo 'действительных решений нет <br>'; break;
  13.        
  14.         case ($d==0): echo 'решение 1 <br>'; break;
  15.        
  16.         case ($d>0): echo 'существуют 2 решения <br>'; break;
  17. }
  18. $x1 = (-$b + sqrt ($d))/2/$a;
  19. echo "x1=$x1 <br>";
  20.  
  21. $x2 = (-$b - sqrt ($d))/2/$a;
  22. echo "x2=$x2 <br>";
  23. ?>

(Отредактировано автором: 05 Апреля, 2011 - 20:03:33)



-----
Если все время идти вперед, до цели будет немного ближе..
 
 Top
valenok
Отправлено: 05 Апреля, 2011 - 20:07:25
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Потому, что конструкция switch работает немного по другому.
Она сравнивает аргумент $d с тем, что написано в скобочках.
Тоесть происходит три сравнения
1. $d == ($d<0) что у него переводится в (false == false) = true и поэтому исполняется это
2. $d == ($d == 0)
3. $d == ($d >0)

можно сделать к примеру так
switch(true):
case ($d>0): break;
case ($d==0): break;
case ($d<0): break;
endswitch;

но лучше использовать в данном случае elseif так как у тебя всего три варианта и в одном из них нужно вовсе прекратить выполнение скрипта.

(Отредактировано автором: 05 Апреля, 2011 - 20:10:22)



-----
Truly yours, Sasha.
 
My status
 Top
Конструктор
Отправлено: 05 Апреля, 2011 - 20:21:04
Post Id



Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010  


Помог: 1 раз(а)




valenok пишет:
Она сравнивает аргумент $d с тем, что написано в скобочках.

Понятно , вроде работает как надо..

Тоесть если логические варианты нужно в скобках писать true,
а если варианты - числа, то будет-->
switch $x
{
case 1: ..;
case 34: ..;
case 5878: ..;
}

И всеже хотел еще спросить что эффективнее работает? или серверу все равно?
Пока прихожу к выводу что если варианты числа то надо - switch - case..
если логика - то if.. elseif...;
это так? и если ли еще аргументы в пользу какого-то способа?

(Отредактировано автором: 05 Апреля, 2011 - 20:26:13)



-----
Если все время идти вперед, до цели будет немного ближе..
 
 Top
valenok
Отправлено: 05 Апреля, 2011 - 20:50:41
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




if else позволяет проверять более сложные условия, по несколько за раз и в разных вариациях, когда делает лишь простые сравнения, но много за раз.


-----
Truly yours, Sasha.
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB