美文网首页
php switch 的一个注意点

php switch 的一个注意点

作者: d866c6045d74 | 来源:发表于2018-04-21 11:20 被阅读94次

    php switch 的一个注意点

        public function formatTime($timestamp) {
            $now = time();
            $diff = $now - $timestamp;
            switch ($diff) {
                case $diff < 60:
                    $re = '1分钟';
                    break;
                case $diff < 60 * 60:
                    $re = strval(intval($diff / 60)) . '分钟';
                    break;
                case $diff < 60 * 60 * 48:
                    $re = strval(intval($diff / (60 * 60))) . '小时';
                    break;
                default:
                    $re = strval(intval($diff / (60 * 60 * 24))) . '天';
                    break;
            }
    
            return $re;
        }
    

    当时间戳是time()的时候,diff为0,想的得到的结果应该是返回1分钟,结果却返回了0天。

    问题的原因就是switch case在执行的流程是 switch 位置的条件和 case 位置的条件做比较,再继续执行程序。

    a.当$diff大于0时,switch位置的条件为“真” true,然后用true 和 case 位置的条件作比较。这时程序是没有问题的,因为只要case位置的条件为true语句就跳出了。

    b.当$diff等于0时,就需要主要了。这个时候switch位置的条件为“假” false,语句继续执行的时候,只有当 case 位置的条件也为false 程序才会执行 case 冒号位置后的程序。而事实是 case 位置的所有调教都为“真”,所以最终的结果是执行default冒号后的语句。

    这种情况将switch($diff)变为switch(true)就好了

    相关文章

      网友评论

          本文标题:php switch 的一个注意点

          本文链接:https://www.haomeiwen.com/subject/iztxlftx.html