1

コードは次のとおりです。

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多くの比較と試してみたいので、すぐに使用する必要があります。この場合、が より大きい場合caseでも、3 番目は常に正しい出力を提供しますが、次のようになるはずです:|$_REQUEST['c']$cbasedefault

4

1 に答える 1

2

はい、これは有効です。を使用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;

}

また、この使用法によりcase、次のようなより複雑なステートメントが可能になります。

switch(TRUE) {
    case strpos($input, 'a') === 0 :
        // do something
        break;
    case strpos($input, 'b') === 0 :
        // do something
        break;
}
于 2013-08-20T23:52:52.927 に答える