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 ?

醉折花枝作酒筹
Libérer: 2023-03-10 14:16:01
avant
1309 Les gens l'ont consulté

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

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

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

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
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