PHP 开关语句限制.我正在使用的


php switch statement limit

PHP脚本包含switch语句和中断,以防止代码自动运行到下一个情况:

if (!isset($a)) $a = '';
switch($a)
{
case 1:
default:
// some code
break;
case 2:
// some code
break;
case 3:
// some code
break;
}

如何防止用户在 URL 中将 "$a" 写入 php switch 语句中不存在的某个数字?例如,在上面的这个例子中,如果有人写成 url indes.php?a=5 应该会收到一条消息,指出链接不正确。最好的方法是什么?

我感兴趣的另一件事是,在一个页面上使用switch语句的数量是否有任何限制,或者如果页面太大,该页面的大小会导致问题吗?

将其添加到switch末尾。

default:
   echo 'not correct';
break;

来自 php 文档:

特殊情况是默认情况。此案例匹配其他案例不匹配的任何内容。例如:

<?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";
}
?>

http://php.net/manual/en/control-structures.switch.php

添加默认大小写。

default:
   echo 'Invalid Option';
break;

而且switchcases没有限制.

更新:

无论页面的大小如何。但实际上,这取决于在案例中编写的脚本或代码。这比这更耗时。

默认标签的位置可能会导致问题,但我不能 100% 确定这一点:

    if (!isset($a)) $a = '';
    switch($a)
    {
    case 1:
    default:
    // some code
    break;
    case 2:
    // some code
    break;
    case 3:
    // some code
    break;
    }

只要与$a匹配,就会执行各个案例语句。 例如,如果用户提交了 3(因此 $a==3),则案例 3 将执行。 它将继续执行,直到命中break;语句。 仅当没有 case 语句与 $a 中包含的值匹配时,才会执行 default 块。

例如,如果用户提交了 5(因此 $a==5),则没有case 5:因此将执行默认块。 因此,通常的标准做法是将 default: 块放在 switch 语句的末尾,如下所示,以表明如果没有 case 语句与条件匹配,它将最后执行。

    if (!isset($a)){
        $a = '';
    }
    switch($a)
    {
        case 1:
            //some code
            break;
        case 2:
            // some code
            break;
        case 3:
            // some code
            break;
        default:
            //code displayed when $a does not match any case statements
    }

希望有帮助。 此外,switch 语句执行速度非常快,它们基本上类似于嵌套的 if 语句。 因此,实际上没有限制,但是,代码优化始终是您应该努力实现的目标。

由于使用了错误的开关结构,您的 switch 语句中断,请在此处查看完整的 switch 语句参考

<?php
$i = 1;
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 'no case match';
         break;
}
?>