• 技术文章 >后端开发 >PHP问题

    PHP的switch和ifelse谁更胜一筹?

    醉折花枝作酒筹醉折花枝作酒筹2021-06-18 17:44:36转载97
    本篇文章给大家介绍一下PHP中的switch和ifelse。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

    PHP的switch和ifelse谁更快?

    对于多个if条件判断的情况下,我们使用switch来代替ifelse对于代码来说会更加的清晰明了,那么他们的效率对比呢?从PHP手册中发现有人已经对比过了,自己也用他的代码进行了实验:

    $s = time();
    for ($i = 0; $i < 1000000000; ++$i) {
        $x = $i % 10;
        if ($x == 1) {
            $y = $x * 1;
        } elseif ($x == 2) {
            $y = $x * 2;
        } elseif ($x == 3) {
            $y = $x * 3;
        } elseif ($x == 4) {
            $y = $x * 4;
        } elseif ($x == 5) {
            $y = $x * 5;
        } elseif ($x == 6) {
            $y = $x * 6;
        } elseif ($x == 7) {
            $y = $x * 7;
        } elseif ($x == 8) {
            $y = $x * 8;
        } elseif ($x == 9) {
            $y = $x * 9;
        } else {
            $y = $x * 10;
        }
    }
    print("if: " . (time() - $s) . "sec\n");
    
    $s = time();
    for ($i = 0; $i < 1000000000; ++$i) {
        $x = $i % 10;
        switch ($x) {
            case 1:
                $y = $x * 1;
                break;
            case 2:
                $y = $x * 2;
                break;
            case 3:
                $y = $x * 3;
                break;
            case 4:
                $y = $x * 4;
                break;
            case 5:
                $y = $x * 5;
                break;
            case 6:
                $y = $x * 6;
                break;
            case 7:
                $y = $x * 7;
                break;
            case 8:
                $y = $x * 8;
                break;
            case 9:
                $y = $x * 9;
                break;
            default:
                $y = $x * 10;
        }
    }
    print("switch: " . (time() - $s) . "sec\n");

    通过1000000000次的循环并在每个判断条件中都加入了运算操作后,我们发现结果是switch的效率更高,运行速度更快,在我的电脑上的结果是:

    // if: 301sec
    // switch: 255sec

    虽然switch的效率更高一些,但也有需要注意的地方,首先,判断值只能是数字、浮点数或者是字符串。其次,每个判断都是普通的==判断,也就是说,下面的判断结果并不一定是你相像的结果:

    $string = "2string";
    
    switch ($string) {
        case 1:
            echo "this is 1";
            break;
        case 2:
            echo "this is 2";
            break;
        case '2string':
            echo "this is a string";
            break;
    }
    
    // this is 2

    没错,依然是==比较时的类型强转问题,string和int值比较时强转为了int类型,"2string"强转的结果正是2。因此,在使用switch的时候,应该保证比较值和每个case的类型一致,否则就可能出现不可预计的错误。

    参考代码:

    https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/PHP%E7%9A%84switch%E5%92%8Cifelse%E8%B0%81%E6%9B%B4%E5%BF%AB%EF%BC%9F.php

    推荐学习:php视频教程

    以上就是PHP的switch和ifelse谁更胜一筹?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:php
    上一篇:期待已久的PHP方法参数类型约束它来咯 下一篇:php怎么将指定字符串替换为空
    第16期线上培训班

    相关文章推荐

    • 如何使用PHP正则对表单数据进行验证?(详细步骤)• 如何用PHP实现用户头像上传功能?(详细介绍)• 详细介绍一下PHP的DBA扩展• php查询字符串的方法有哪些• 期待已久的PHP方法参数类型约束它来咯

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网