如何处理不同类型的PHP开关?

dan*_*car 15 php

如何使交换机尊重数据类型(是否有更好的解决方法,如果/ else)?

  • $ value = false; //应该回显假
  • $ value = null; //应该回显null

    
    
    switch ($value) {
        case '0' :
            echo 'zero';
            break;
        case '' :
            echo 'empty';
            break;
        case null :
            echo 'null';
            break;
        case false :
            echo 'false';
            break;
        default :
            echo 'default';
            break;
    }
    
    

    结论

  • 开关/外壳确实松动比较.
  • 解决方案:使用ifs或if/else切换

  • Kin*_*nch 29

    switch (true) {
        case $value === '0' :
            echo 'zero';
            break;
        case $value === '' :
            echo 'empty';
            break;
        case $value === null :
            echo 'null';
            break;
        case $value === false :
            echo 'false';
            break;
        default :
            echo 'default';
            break;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    我认为,它比if-elseif下面给出的链更具可读性:

    if ($value === '0') {
      echo 'zero';
    } else if ($value === '') {
      echo 'empty';
    } else if ($value === null) {
      echo 'null';
    } else if ($value === false) {
      echo 'false';
    } else {
      echo 'default';
    }
    
    Run Code Online (Sandbox Code Playgroud)

    • 不同意可读性部分(一个额外的缩进级别,相同数量的行(如果你格式化if/else比@nicola更好)和更直接的表达你做什么到下一个为什么读取那个(wtf因子@switch(真)一秒钟.)但我在挑剔.+ 1 (2认同)
    • @edorian:嗯......我用"我认为,它更具可读性"取代了"更具可读性";)但我仍然认为,它更清洁了(比如说)3个4个案例.使用`switch(true)`每个case语句都被评估为类似`true ==($ statement)`的东西.我想,很明显. (2认同)
    • `switch(true)` 是一个非常糟糕的结构 (2认同)

    nic*_*ola 5

    我相信你可以尝试if-then以便于使用'==='代替:

    <?php
    $value = 0;
    
    if ($value==="") {
      echo "blank (string)";
    }
    else
    if ($value==="0") {
      echo "zero (string)";
    }
    else
    if ($value===false) {
      echo "false (boolean)";
    }
    else
    if ($value===null) {
      echo "null (object)";
    }
    else
    if ($value===0) {
      echo "zero (number)";
    }
    else {
      echo "other";
    }
    ?>
    
    Run Code Online (Sandbox Code Playgroud)