Maison  >  Article  >  développement back-end  >  Quelle est la différence entre switch et ifelse en PHP ? Lequel est le plus rapide à utiliser ?

Quelle est la différence entre switch et ifelse en PHP ? Lequel est le plus rapide à utiliser ?

藏色散人
藏色散人avant
2021-09-20 16:37:173502parcourir

Lequel est le plus rapide, PHP switch ou autre ?

Pour plusieurs conditions if, nous utilisons switch au lieu de ifelse pour rendre le code plus clair. Alors, quelle est leur comparaison d'efficacité ? D'après le manuel PHP, j'ai découvert que quelqu'un l'avait déjà comparé, et j'ai également mené des expériences avec son code :

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

Après avoir bouclé 1000000000 fois et ajouté des opérations de calcul à chaque condition de jugement, nous avons constaté que le résultat est l'efficacité de switch It est plus élevé et fonctionne plus rapidement. Le résultat sur mon ordinateur est :

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

Bien que switch soit plus efficace, il y a aussi des choses auxquelles il faut faire attention. Tout d'abord, la valeur du jugement ne peut être qu'un nombre, un nombre à virgule flottante ou une chaîne. . Deuxièmement, chaque jugement est un jugement == ordinaire, c'est-à-dire que les résultats du jugement suivant ne sont pas nécessairement les mêmes que les vôtres :

$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

Oui, c'est toujours un problème de coercition de type lors de la comparaison ==, de la chaîne et de la comparaison d'int valeurs, elles sont forcées au type int. Le résultat de la conversion forcée de "2string" est exactement 2. Par conséquent, lorsque vous utilisez switch, vous devez vous assurer que la valeur de comparaison est cohérente avec le type de chaque cas, sinon des erreurs imprévisibles pourraient se produire.

参考代码: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

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer