Maison >développement back-end >Problème PHP >Lequel est le meilleur, le commutateur PHP ou autre ?

Lequel est le meilleur, le commutateur PHP ou autre ?

醉折花枝作酒筹
醉折花枝作酒筹avant
2021-06-10 17:38:391318parcourir

Cet article vous présentera switch et ifelse en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Lequel est le meilleur, le commutateur PHP ou autre ?

Lequel est le plus rapide, un commutateur PHP 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 à chaque condition de jugement, nous avons trouvé le résultat Le commutateur est plus efficace et fonctionne plus rapidement. Le résultat sur mon ordinateur est :

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

Bien que le commutateur soit plus efficace, il y a aussi des choses auxquelles il faut prêter attention. Tout d'abord, la valeur de jugement ne peut être que le nombre, nombre à virgule flottante ou 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 &#39;2string&#39;:
        echo "this is a string";
        break;
}

// this is 2

Oui, c'est toujours un type exprimé lors de la comparaison == Le problème. est que lors de la comparaison des valeurs string et int, ils sont obligés de taper 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.

Code de référence :

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