Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen switch und ifelse in PHP? Welches ist schneller zu verwenden?

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

藏色散人
藏色散人nach vorne
2021-09-20 16:37:173513Durchsuche

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");

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

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

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen