ホームページ > バックエンド開発 > PHPチュートリアル > PHP:switch caseとif elseの使い方の違いと動作効率を詳しく解説

PHP:switch caseとif elseの使い方の違いと動作効率を詳しく解説

伊谢尔伦
リリース: 2023-03-11 09:58:02
オリジナル
3209 人が閲覧しました

switch ステートメントは、同じ を含む一連の IF ステートメントに似ています。同じ変数 (または式) をさまざまな値と比較し、どの値と等しいかに応じて異なるコードを実行する必要がある状況は数多くあります。これはまさに switch ステートメントの目的です。

注: 他の言語とは異なり、Continue ステートメントは switch に適用される場合は Break に似ていることに注意してください。ループ内にスイッチがあり、外側のループの次の反復に継続したい場合は、次を使用します。 2を続ける。

次の 2 つの例では、2 つの異なる方法を使用して同じことを実現しています。1 つは一連の if ステートメントを使用し、もう 1 つは switch ステートメントを使用しています。

<?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;
}
?>
ログイン後にコピー

キーポイント: (これは私が今まで理解できなかったことです!)

間違いを避けるために、switch がどのように実行されるかを理解することが非常に重要です。 switch ステートメントは 1 行ずつ (実際にはステートメントごとに) 実行されます。最初はコードは実行されません。 case ステートメントの値が switch 式の値と一致する場合のみ PHP は、switch プログラム セグメント (return ステートメントなど) が終了するか、最初の Break ステートメントに到達するまで、ステートメントの実行を開始しません。ケースのステートメントセクションの最後にbreakが書かれていない場合、PHPは 次のケースのステートメントセグメントの実行が続行されます。例:

<?php
switch ($i)
{
    case "apple":
        echo "i is apple";
        break;
    case "bar":
        echo "i is bar";
        break;
    case "cake":
        echo "i is cake";
        break;
}
?>
ログイン後にコピー
特記事項: $i が 3 に等しい場合、PHP は echo ステートメントを実行しません。ただし、$i が 0 に等しい場合、PHP はすべての echo ステートメントを実行します。 $i が 1 の場合、PHP は次の 2 つの echo ステートメントを実行します。 $i が 2 に等しい場合にのみ、「期待される」結果が得られます。つまり、「i は 2 に等しい」だけです。したがって、break ステートメントを忘れないことが重要です (場合によっては、意図的にブレーク ステートメントの提供を避けたい場合でも)。

[効率] switch ステートメントでは、条件は 1 回だけ評価され、各 case ステートメントとの比較に使用されます。条件は elseif ステートメントで再度評価されます。条件が単純な比較よりも複雑である場合、または何度もループする場合は、switch ステートメントを使用した方が高速な場合があります。

ケース内のステートメントを空にすることもできます。これは、制御を次のケースのステートメントに移すだけです。

<?php
switch ($i)
{
    case 0:
        echo "i equals 0";
    case 1:
        echo "i equals 1";
    case 2:
        echo "i equals 2";
}
?>
ログイン後にコピー

ケースの特別なケースがデフォルトです。他のどの大文字と小文字も一致しないあらゆる大文字と小文字が一致します。例:

<?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";
}
?>
ログイン後にコピー

case 式は、単純な型 (つまり、文字列だけでなく整数や浮動小数点数) に評価される任意の式にすることができます。配列またはオブジェクトは、単純型に逆参照されない限り使用できません。

実戦

上記の知識ポイントに基づいて、次のような関数を作成します: 容量値によって実際に表されるバイト数を計算します

<?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";
}
?>
ログイン後にコピー
出力:
<?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);
ログイン後にコピー
特記事項: $val = 400M、ケース 'm' がヒット、$val がそれより下 *= 1024; が実行されますが、ブレーク言語がないため、引き続き case 'k' がヒットし、その下の $val *= 1024; ステートメントが実行されるため、全体としては 400 を実行するのと同等になります。 *1024*1024。

以上がPHP:switch caseとif elseの使い方の違いと動作効率を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート