Это код:
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
: |
Да, это действительно так. Использование 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; }