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“