powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Не срабатывает условие в switch case
20 сообщений из 20, страница 1 из 1
Не срабатывает условие в switch case
    #39295235
andrey10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
$page = 'b';
switch($page) {
	case ('a' && true):
		echo 'match';
		break;
	default:
		echo 'not';
		break;
}



Выдает "match". Почему? Хочу обрабатывать несколько условий в case - как правильно это делать? Делать гору ифов взамен свичу не хочется ;(
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295244
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey10Почему?Суть switch...case - многократное сравнение переменной или выражения с различными значениями.
В ряде случаев значения разных типов при выполнении некоторых операций приводятся к одному типу. Подробнее, например, в мануале .
Что получается в данном случае. В выражении "('a' && true)" строка 'a' перед выполнением логического "И" будет преобразована в булево true и, как следствие, результатом выражения будет true. С этим true и будет сравниваться значение переменной $page. Перед сравнением строки 'b' с булевым значением, оная строка преобразовывается в булево true. Соответственно, результатом сравнения в первом case будет "истина".
Как-то вот так получается.


andrey10Хочу обрабатывать несколько условий в case - как правильно это делать?Не вполне понятно, что именно хотите. Покажите пример на if'ах.
Возможно, желаемое и не получится. Ведь switch...case является лишь частным случаем if...elseif...else, но не 100% заменой.
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295323
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey10,

Сакральный смысл
Код: php
1.
('a' && true)

не понял. Зачем раскладывать грабли на пустом месте?
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295575
andrey10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ. Провел еще пару тестов и обнаружил странность (по крайней мере для себя).

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$a = '';
$b = 'test';
switch ($a) {
case ($a == 'q'):
	echo 1;
	break;
case ($b == 'q'):
	echo 2;
	break;
}



Почему выдает 1? Ведь переменные $a и $b одного типа.
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295576
andrey10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Модератор, удалите моё сообщение, а то мне стыдно что я такой баран.
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295624
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey10Почему выдает 1? Ведь переменные $a и $b одного типа.Результат сравнения ($b == 'q') есть булево значение безотносительно типа сравниваемых данных. Про остальное выше писал уже.


andrey10удалите моё сообщение, а то мне стыдноДа нечего тут стыдиться. На этих примерах Вы разобрались, КАК эта штука работает и ПОЧЕМУ из такого подхода ничего толкового не получится. Особенности языка. Может, кому-то ещё придётся разобраться, пусть будет материал.
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295642
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю, что вы там хотите сделать, но можно вот так
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$a = '';
$b = 'test';
switch (true) {
case ($a === 'q'):
	echo 1;
	break;
case ($b === 'q'):
	echo 2;
	break;
}
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295777
andrey10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SharuPoNemnogu,

Вау, а вот это классное решение.
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295826
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем else if то не нравится? Зачем этот изврат?
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295921
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettЧем else if то не нравится? Зачем этот изврат?
Почему изврат? Вполне распространённое решение: то, что через switch (true) .
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295929
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Распространенное среди, извиняюсь, говнокодеров?
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295937
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettРаспространенное среди, извиняюсь, говнокодеров?
Нет. JavaScript и PHP разработчиков. Аргументы-то будут, или только эмоции? :)
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295959
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAHettРаспространенное среди, извиняюсь, говнокодеров?
Нет. JavaScript и PHP разработчиков. Аргументы-то будут, или только эмоции? :)

У меня один аргумент, - это не нужное загромождение. Хотелось бы услышать Ваши аргументы в пользу такой конструкции.
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295971
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettskyANAпропущено...

Нет. JavaScript и PHP разработчиков. Аргументы-то будут, или только эмоции? :)

У меня один аргумент, - это не нужное загромождение. Хотелось бы услышать Ваши аргументы в пользу такой конструкции.
Я не считаю это загромождением, или извратом, или говнокодом. Обычный switch со своими плюшками.
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39295995
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

так а можно ссылку увидеть на распространённость. я с разными фреймворками(пхп) работал и код до глубины дебагом изучал, и вот не втречал подобного.

ЗЫ кстате - плюшка... я не разу не видел серьёзной статьи где бы чтото называлось плюшкой... согласись, это не серьёзное отношение к диалогу, в большинстве случаев, и точка зрения за этим стоит не серьёзная - но ты сдесь на форуме, человек серьёзный, поэтому таки хочется убедится что оно распространнено.
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39296073
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственный минус этого подхода, php switch (не помню как в js) использует не жесткое сравнение, и можно нарваться на кривую логику (как в случае ТС'а), именно поэтому я прописал ===. Что же касается распространенности, в нашем проекте я нашел 17 случаев использования в разном контексте, и выглядит это нагляднее (имхо), чем if elseif else из 5 штук
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39296098
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453skyANA,

так а можно ссылку увидеть на распространённость. я с разными фреймворками(пхп) работал и код до глубины дебагом изучал, и вот не втречал подобного.

ЗЫ кстате - плюшка... я не разу не видел серьёзной статьи где бы чтото называлось плюшкой... согласись, это не серьёзное отношение к диалогу, в большинстве случаев, и точка зрения за этим стоит не серьёзная - но ты сдесь на форуме, человек серьёзный, поэтому таки хочется убедится что оно распространнено.
Например: PHP If Else and Switch Case

А что касается плюшек, то перепишите на if-ы следующий код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
switch (true) {
    case ($a === 'q'):
    case ($d === 'q'):
        echo 1;
        break;
    case ($b === 'q'):
        echo 2;
    case ($c === 'q'):
        echo 3;
        break;
}
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39296322
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAalex564657498765453skyANA,

так а можно ссылку увидеть на распространённость. я с разными фреймворками(пхп) работал и код до глубины дебагом изучал, и вот не втречал подобного.

ЗЫ кстате - плюшка... я не разу не видел серьёзной статьи где бы чтото называлось плюшкой... согласись, это не серьёзное отношение к диалогу, в большинстве случаев, и точка зрения за этим стоит не серьёзная - но ты сдесь на форуме, человек серьёзный, поэтому таки хочется убедится что оно распространнено.
Например: PHP If Else and Switch Case

А что касается плюшек, то перепишите на if-ы следующий код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
switch (true) {
    case ($a === 'q'):
    case ($d === 'q'):
        echo 1;
        break;
    case ($b === 'q'):
        echo 2;
    case ($c === 'q'):
        echo 3;
        break;
}



Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
if ($a === 'q' || $d === 'q')
{
    echo 1;
}
else
{
    if ($c === 'q' || $b === 'q')
    {
        if ($b === 'q')
        {
            echo 2;
        }
        echo 3;
    }
}



да переписать то не проблемма. и вопрос наглядности это вопрос привычки. для азиата их форма лица куда наглядней, чем для нас, нам они все на одно лицо по началу.

речь ведь не о том. речь о - свитч, нужен когда у нас несколько равноправных вариантов
(больше 2)

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

даже в документации обычн опишут как
if (<condition>) ....

switch(<variable>) { case <value1> : <operator>;....

а предлагается, использовать свитч(вами предлагается) - не только как блок ветвления на основе значения ПЕРЕМЕННОЙ, а просто как блок ветвления.

и вот возникает вопрос - насколько это распространенно. ибо если не очень, то подобный код автоматически иммеет минус в поддерживаемости, что люди будут видеть неожиданный трюк(плюшку). и думать ...что за емае.

с другой стороны, вообще считается ветвление не должно быть сложным(делать одно из 10 действий на основе одного из возможных 10 значений переменной другой случай, хотя есть точка зрения свитч сам по себе не есть гуд. (логика проста, где 10 значений, там будет и 11, что постоянно дописывать код? нет, должно конфигурироватся.)

также некоторые среды даже подсказывают - заменить свитч на иф., так сказать смелл код.

понимаете, что я хочу допросится от вас? по феншую учат не делать сложных ветвлений, свитч для ветвления на основе значений переменной но это не очень хорошо, а вы мало того что говорите делать сложное ветвление, так есчё и способом нестандартным, через оператор который сам по себе критикуется слегка.
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39296331
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453,

код можно переписать и проще - полный аналог отдельных ифов с одинарным спареным условием(через или) и вместо брика гоуту. для тех кто хочет чтото сказать по поводу гоуту - раслабтесь, свитч сам по себе серия гоуту, а брик так и подавно, то что вы этого не увидели сразу, не означает что его нет - опять же дело привычки. и если поспорить то поди
гоуту КОНЕЦ_ВЕТВЛЕНИЯ;
.......
.......
:КОНЕЦ_ВЕТВЛЕНИЯ;
куда более понятен, чем брик, и листай по коду не запутайся в отступах и найди или пусть идешка подскажет, где же та заветная закрывающаяся скобка, куда мы попадём - но соглашусь - сегоня использовать гоуту, это способ заставить среднего програмиста переписать хороший код на свой средний(напугать). базовое использование гоуту - это сегодня вызов подпрограммы(функции) ...но мы не про гоуту. а про свитсч, прост упомянул, что ифы тоже могут быть без дублирования условия, если использовать скачок - просто для свитча он есть, а для ифа брика нету, для ифа прышки делаются через гоуту ...но как я и сказал выше - базовый феншуй - избегать сложного ветвления.
...
Рейтинг: 0 / 0
Не срабатывает условие в switch case
    #39296350
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453понимаете, что я хочу допросится от вас?
Нет, не понимаю.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Не срабатывает условие в switch case
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]