Сопоставления в случаях переключения, действительно ли они?

Это код:

switch (true) { case (isset($_REQUEST['a']) && is_numeric($_REQUEST['a']) && ($_REQUEST['a'] > 0)): case (isset($_REQUEST['b']) && is_string($_REQUEST['b']) && in_array($_REQUEST['b'], $barray)): case (isset($_REQUEST['c']) && is_numeric($_REQUEST['c']) && ($_REQUEST['c'] > 0) && ($_REQUEST['c'] <= $cbase)): try { echo "Foo"; } catch(Exception $e) { echo $e->getMessage(); } break; default: echo "Bar"; break; } 

Мне интересно, разрешено ли им использовать в случаях переключения? Очень скоро я должен использовать switch из-за многих сравнений и готов попробовать его. В этом случае 3-й case дает мне всегда правильный вывод, даже если $_REQUEST['c'] больше, чем $cbase , а должен упасть до default по default : |

Related of "Сопоставления в случаях переключения, действительно ли они?"

Да, это действительно так. Использование switch(TRUE) позволяет выполнять строгие сравнения в инструкции switch. проверьте эти примеры:

Нет типов:

 $a = '1'; switch($a) { case 1 : // do something (will get executed) break; case '1' : // do something: break; } 

Лучше:

 $a = '1'; switch(TRUE) { case $a === 1 : // do something; (will not get executed) break; case $a === '1' : // .. do something; break; } 

Также это использование позволяет более сложные заявления о случаях, например:

 switch(TRUE) { case strpos($input, 'a') === 0 : // do something break; case strpos($input, 'b') === 0 : // do something break; }