Was ist der Unterschied zwischen switch und ifelse in PHP? Welches ist schneller zu verwenden?

藏色散人
Freigeben: 2023-04-10 17:02:01
nach vorne
3520 Leute haben es durchsucht

Welches ist schneller, PHP-Switch oder ifelse?

Für mehrere if-Bedingungen verwenden wir switch anstelle von ifelse, um den Code klarer zu machen. Wie ist also der Effizienzvergleich? Aus dem PHP-Handbuch habe ich herausgefunden, dass jemand es bereits verglichen hat, und ich habe auch Experimente mit seinem Code durchgeführt:

$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");
Nach dem Login kopieren

Nachdem wir 1000000000 Mal eine Schleife durchlaufen und zu jeder Beurteilungsbedingung Berechnungsoperationen hinzugefügt haben, haben wir festgestellt, dass das Ergebnis die Effizienz des Schalters ist ist höher und läuft schneller.

// if: 301sec
// switch: 255sec
Nach dem Login kopieren

Obwohl switch effizienter ist, gibt es auch Dinge, auf die man achten muss. Erstens kann der Beurteilungswert nur eine Zahl, eine Gleitkommazahl oder eine Zeichenfolge sein. . Zweitens ist jedes Urteil ein gewöhnliches ==-Urteil, das heißt, die folgenden Urteilsergebnisse stimmen nicht unbedingt mit Ihrem überein:

$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
Nach dem Login kopieren

Ja, beim Vergleich von ==, string und int handelt es sich immer noch um ein Typzwangsproblem Werte, sie werden in den Typ int gezwungen. Das Ergebnis der erzwungenen Konvertierung von „2string“ ist genau 2. Daher sollten Sie bei der Verwendung von Switch darauf achten, dass der Vergleichswert mit dem jeweiligen Falltyp übereinstimmt, da sonst unvorhersehbare Fehler auftreten können.

参考代码: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
Nach dem Login kopieren

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen switch und ifelse in PHP? Welches ist schneller zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage