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

藏色散人
Libérer: 2023-04-10 17:02:01
avant
3518 Les gens l'ont consulté

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");
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
php
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal