php使用开关不间断;

时间:2010-08-23 08:01:09

标签: php

我的开关出了什么问题? 现在结果:

< more
> less
= equality
!= no't equality 

应该是:

< more
= equality

<?php
$page = 99;

    switch ($page)
    {
        case $page < 121:
            echo '< more <br/>';
        case $page > 123:
            echo '> less <br/>';
        case $page == 99:
            echo '= equality <br/>';
        case $page != 99:
            echo '!= no\'t equality <br/>';
    }   
    ?>

6 个答案:

答案 0 :(得分:13)

在你的switch语句中,你将一个数字与布尔值进行比较 我们假设第一个案例$page < 121true,因此根据http://docs.php.net/language.types.type-juggling 99==true进行比较true break执行松散的比较,不像switch那样严格。因此执行第一个案例块 由于你没有===语句,它会进入下一个案例块和下一个案件块,等等...... 含义:无论您是否使用{{1}},这都不会按预期工作。

答案 1 :(得分:8)

您似乎不了解交换机的工作原理。你想要的是一系列if语句,即

        if ($page < 121)
            echo '< more <br/>';
        if ($page > 123)
            echo '> less <br/>';
        if ($page == 99)
            echo '= equality <br/>';
        if ($page != 99)
            echo '!= no\'t equality <br/>';

答案 2 :(得分:5)

仅当您想要将变量与一组值进行比较时才使用切换。

switch ($variable)
{
   case "me":
       echo "variable is me";
      break;

   case "you":
       echo "variable is you";
       break;
   default:
      echo "Variable is neither of us";

}

上面的开关案例块可以写成如下:

if ($variable=="me")
{
   echo "variable is me";
}
elseif ($variable=="you")
{
   echo "variable is you";
}
else
{
  echo "variable is neither of us";
}

请勿在case语句附近放置表达式。

switch ($somethng)
{
     case $something < 10:
      break;
     case $something > 20:

     break;
}

Switch仅用于将变量与一组值进行比较。只要!对于其他所有内容,请使用if ... elseif..else语句。

上面的块是错误的用法。有时,这些表达中不止一个可能是真的。

答案 3 :(得分:1)

$var = "cat";

switch($var)
{
  case "cat":
     echo 'My '.$var.' is called Bob.';
    break;
  case "dog":
     echo 'My '.$var.' is called James.';
    break;
  default:
     echo "I don't have an animal";
    break;
}

在switch state中,将$ var与case中的值进行比较。如果匹配,将执行实际情况,否则将执行默认情况。您不能在案例中使用&lt;&gt;!= ...,只能使用以下值:1,'1','dog',$ var2等。

如果你想为两种情况运行相同的命令,你可以这样做:

$var = "cat";

switch($var)
{
  case "cat":
  case "dog":
     echo 'My '.$var.' is called James.';
    break;
  default:
     echo "I don't have an animal";
    break;
}

在你的代码中,你忘记了休息;在每个案例的最后,这就是你在输出中看到“一切”的原因。你错过了默认:也是。

对于你正在做的任务,我建议你使用if语句。

答案 4 :(得分:0)

如果我没错,你就不能使用这个字符&lt; &GT;原始的HTML。而是使用实体&amp; gt;和&amp; lt;。

如果您在命令行中运行脚本,我得到了以下输出。

<?php
ob_start();
$page = 99;

switch ($page)
{
    case $page < 121:
        echo '< more <br/>';
    case $page > 123:
        echo '> less <br/>';
    case $page == 99:
        echo '= equality <br/>';
    case $page != 99:
        echo '!= no\'t equality <br/>';
}

$buffer = ob_get_clean();

echo str_replace('<br/>', "\n", $buffer);

输出

< more 
> less 
= equality 
!= no't equality

这似乎是正确的行为。

  

重要的是要了解如何   switch语句按顺序执行   避免错误。开关   语句逐行执行   (实际上,声明中的声明)。在   一开始,没有代码被执行。   仅在找到案例陈述时   具有与值相匹配的值   PHP开始的开关表达式   执行声明。 PHP   继续执行这些陈述   直到开关块结束,或   它第一次看到休息   言。

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

答案 5 :(得分:-1)

“;             打破;         case $ page&gt; 123:             回声'&gt;少了'';             打破;         case $ page == 99:             echo'= equality
';             打破;         case $ page!= 99:             echo'!= no \'t equality
';             打破;         默认值:echo'Default';     }     ?&GT;