流程控制的替代语法之switch


如果你听人说过,如果你能用switch替代if elseif的时候,要果断替换。如果你也不喜欢模板引擎进行模板式开发。那么你就应该碰到过这个问题。

<?php switch ($x):?>
<?php case 1:?>
$x应该是1
<?php break;case 2:?>
$x应该是2
<?php endswitch;?>

然后,编辑器就告诉我语法错误。我很诧异。为什么呢?

经提示,发现第一行有错误。说少case/default语句。我尝试如下代码:

<?php switch ($x):case 1:?>
$x应该是1
<?php break;case 2:?>
$x应该是2
<?php endswitch;?>

然后,就发现编辑器的错误提示没了, 运行,果真没错了~

可,知道没错了, 还不知道啥原因呢啊!继续尝试如下代码:

<?php switch ($x):?><?php case 1:?>
$x应该是1
<?php break;case 2:?>
$x应该是2
<?php endswitch;?>

无错!那再格式化一下呢?

<?php switch ($x):?>
<?php case 1:?>
$x应该是1
<?php break;case 2:?>
$x应该是2
<?php endswitch;?>

继续报错!原因是啥可能大家都清楚了把。switch语句跟第一个case语句之前是不能有任何输出的。包括换行呀空格呀都不行的。所以,我们认为好看的代码是不正确的。

其实,我是被这个写法骗了。在php代码中, 你可能会这么写:

<?php switch ($x){
//随便有多少空格回车
    case 1:
        echo '$x应该是1';
        break;
    case 2:
        echo '$x应该是2';
}

因为这是在php标签内,php解释器会忽略语句外的空字符(空格,回车,制表符)。

然后,可以尝试如下错误写法,这跟我犯的错误是一样一样的:

<?php switch ($x){
    echo 'rt';
    case 1:
        echo '$x应该是1';
        break;
    case 2:
        echo '$x应该是2';
}

 


发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注