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 :: почему не работает case?

 PHP.SU

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


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

> Без описания
Perun
Отправлено: 28 Апреля, 2019 - 19:09:41
Post Id


Гость


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


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




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function discriminant($a, $b, $c){
  3.     return $b*$b-4*$a*$c;
  4. }
  5. $a = 1;
  6. $b = 12;
  7. $c = 36;
  8. $result=discriminant($a,$b,$c);
  9. echo 'дискриминант: '.$result.'<br>';
  10. switch($result){
  11.     case ($result<0) : {
  12.         echo 'корней нет';
  13.         break;
  14.     }
  15.     case ($result>0) : {
  16.         $res1 = (-$b+sqrt(discriminant($a,$b,$c)))/(2*$a);
  17.         $res2 = (-$b-sqrt(discriminant($a,$b,$c)))/(2*$a);
  18.         echo 'корень1: '.$res1.'<br>';
  19.         echo 'корень2: '.$res2;
  20.         break;
  21.     }
  22.     case ($result==0) : {
  23.         $res1 = (-$b+sqrt(discriminant($a,$b,$c)))/(2*$a);
  24.         echo 'корень1: '.$res1;
  25.         break;
  26.     }
  27. }
  28. ?>


В выводе дискриминант 0 и нет корней.
Дискриминант вычисляется правильно, но switch не пойму почему игнорирует условие, когда дискриминант = 0 и отрабатывает условие когда дискриминант меньше нуля.

(Отредактировано автором: 28 Апреля, 2019 - 19:43:47)

 
 Top
Мелкий Супермодератор
Отправлено: 28 Апреля, 2019 - 19:22:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Perun пишет:
switch($result){
    case ($result<0) : {

Здесь замысловато написано:

Работает соответственно этому корректно.


-----
PostgreSQL DBA
 
 Top
Perun
Отправлено: 28 Апреля, 2019 - 19:31:01
Post Id


Гость


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


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




Через if-else работает. А как правильно будет записать через switch-case? Или в подобных случаях switch-case не уместно?

(Отредактировано автором: 28 Апреля, 2019 - 19:52:55)

 
 Top
Мелкий Супермодератор
Отправлено: 28 Апреля, 2019 - 21:52:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Неуместен, да. switch используется для проверки на равенство.

Логически корректно, впрочем, будет
PHP:
скопировать код в буфер обмена
  1. switch (true) {
  2.     case ($result<0):

Но обычно такой вариант не используется.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 29 Апреля, 2019 - 15:23:50
Post Id


Активный участник


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


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




вообще многоэтажные проверки лучше не использовать
портянку можно заменить полиморфизмом
шаблон "стратегия" например вполне тут к месту будет для освоить
 
 Top
Строитель Модератор
Отправлено: 29 Апреля, 2019 - 16:15:30
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




LIME пишет:
шаблон "стратегия" например вполне тут к месту будет
Прикольный шаблон, почитал тут: Шаблоны проектирования: Стратегия
 
 Top
Perun
Отправлено: 29 Апреля, 2019 - 16:28:18
Post Id


Гость


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


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




Это точно ветка для новичков?
Я то в целом знаком с классами, но во многом еще за деревьями не вижу леса...
 
 Top
LIME
Отправлено: 29 Апреля, 2019 - 16:34:15
Post Id


Активный участник


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


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




Perun ниче страшного
больше то некому отвечать
терпи)
Строитель читай лучше тут https://refactoring[dot]guru/ru/design-patterns
особенно по ссылкам ниже основного материала и сравнение паттернов
например в фабриках легко вообще ничего не понять и даже не заметить этого))
а там есть ссылка на сравнение
 
 Top
Строитель Модератор
Отправлено: 29 Апреля, 2019 - 18:55:01
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




LIME пишет:
Строитель читай лучше тут https://refactoring[dot]guru/ru/design-patterns
особенно по ссылкам ниже основного материала и сравнение паттернов
например в фабриках легко вообще ничего не понять и даже не заметить этого))
а там есть ссылка на сравнение
Благодарю за линк.
 
 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