Maison  >  Article  >  développement back-end  >  PHP : explication détaillée des différences d'utilisation et de l'efficacité opérationnelle du boîtier de commutation et si le reste

PHP : explication détaillée des différences d'utilisation et de l'efficacité opérationnelle du boîtier de commutation et si le reste

伊谢尔伦
伊谢尔伦original
2017-06-24 10:37:243196parcourir

L'instruction

switch est similaire à une série d'instructions IF avec la même expression. Il existe de nombreuses situations dans lesquelles vous devez comparer la même variable (ou expression) avec de nombreuses valeurs différentes et exécuter un code différent en fonction de la valeur à laquelle elle est égale. C'est exactement à cela que sert l'instruction switch.

Remarque : notez que contrairement à d'autres langages, l'instruction continue agit de la même manière pour rompre lorsqu'elle est appliquée pour changer. Si vous avez un commutateur dans une boucle et que vous souhaitez passer à l'itération suivante dans la boucle externe, utilisez continuer 2.

Les deux exemples suivants utilisent deux méthodes différentes pour réaliser la même chose, l'une utilisant une série d'instructions if et l'autre utilisant une instruction switch :

Exemple n°1 de structure de commutation

<?php
if ($i == 0)
{
    echo "i equals 0";
}
elseif ($i == 1)
{
    echo "i equals 1";
}
elseif ($i == 2)
{
    echo "i equals 2";
}
 
switch ($i)
{
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
}
?>

Exemple n°2 : la structure de commutateur peut utiliser une chaîne

<?php
switch ($i)
{
    case "apple":
        echo "i is apple";
        break;
    case "bar":
        echo "i is bar";
        break;
    case "cake":
        echo "i is cake";
        break;
}
?>

Point clé : (C'est ce que je n'ai jamais maîtrisé auparavant !)

Pour éviter les erreurs, il est très important de comprendre comment le switch est exécuté. Les instructions switch sont exécutées ligne par ligne (en fait instruction par instruction). Au départ, aucun code n'est exécuté. Uniquement si la valeur d'une instruction case correspond à la valeur de l'expression switch PHP ne commence pas à exécuter les instructions avant la fin du segment du programme switch (comme l'instruction return) ou jusqu'à ce que la première instruction break soit rencontrée. Si break n'est pas écrit à la fin de la section instruction du cas, PHP L'exécution du segment de déclaration dans le cas suivant se poursuivra. Par exemple :

<?php
switch ($i)
{
    case 0:
        echo "i equals 0";
    case 1:
        echo "i equals 1";
    case 2:
        echo "i equals 2";
}
?>

Remarque : si $i est égal à 3, PHP n'exécutera aucune instruction echo ! Cependant, si $i est égal à 0, PHP exécutera toutes les instructions echo ! Si $i est égal à 1, PHP exécutera les deux instructions echo suivantes. Ce n'est que si $i est égal à 2 que vous obtenez le résultat "attendu" - juste "i est égal à 2". Il est donc important de ne pas oublier les instructions break (même si l’on veut délibérément éviter de les fournir dans certains cas).

[Efficacité] Dans l'instruction switch, la condition n'est évaluée qu'une seule fois et comparée à chaque instruction case. La condition est à nouveau évaluée dans l'instruction elseif. Si la condition est plus complexe qu’une simple comparaison ou si elle est dans une boucle plusieurs fois, il peut être plus rapide d’utiliser une instruction switch.

L'instruction dans un cas peut également être vide, ce qui transfère simplement le contrôle à l'instruction dans le cas suivant.

<?php
switch ($i)
{
    case 0:
    case 1:
    case 2:
        echo "i is less than 3 but not negative";
        break;
    case 3:
        echo "i is 3";
}
?>

Un cas particulier de cas est par défaut. Il correspond à n’importe quel cas qui ne correspond à aucun autre cas. Par exemple :

<?php
switch ($i)
{
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
    default:
        echo "i is not equal to 0, 1 or 2";
}
?>

case expression peut être n’importe quelle expression qui s’évalue en un type simple, c’est-à-dire un nombre entier ou à virgule flottante ainsi qu’une chaîne. Les tableaux ou les objets ne peuvent pas être utilisés à moins qu'ils ne soient déréférencés vers des types simples.

[Pratique ] Sur la base des points de connaissances ci-dessus, écrivez une fonction comme celle-ci : Calculer le nombre d'octets réellement représentés par la valeur de capacité

<?php
/**
 * 返回字节数
 *
 * @param string $val 如 400M
 */
function return_bytes($val = &#39;&#39;)
{
    $val = trim($val);
    $last = strtolower($val{strlen($val)-1});
    switch ($last)
    {
        case &#39;g&#39;:
            $val *= 1024;
        case &#39;m&#39;:
            $val *= 1024;
        case &#39;k&#39;:
            $val *= 1024;
    }
 
    return $val;
}
 
$memorylimit = ini_get(&#39;memory_limit&#39;);
echo $memorylimit, &#39;<br/>&#39;;
echo return_bytes($memorylimit);

Sortie :

400M
419430400

Remarque spéciale : lorsque $val = 400M, le cas 'm' est atteint et $val en dessous *= 1024; est exécuté, mais comme il n'y a pas de langage de rupture, il continuera à atteindre le cas 'k' et exécutera l'instruction $val *= 1024 en dessous, donc, globalement, cela équivaut à exécuter 400; *1024*1024.

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