【问题标题】:Why is the corresponding statement not executed even if echo empty($location) prints out 1为什么即使 echo empty($location) 打印出 1 也没有执行相应的语句
【发布时间】:2009-12-13 04:30:16
【问题描述】:
echo empty($location);
switch($location){
    case (empty($location)):
expression 1;
    break;
    case ($location%10000==0):
expression 2;
    break;
    case ($location%100==0):
expression 3;
    break;
    default:
    expression 4;
    break;

}

当我 echo empty($location) 时,它打印出 1,为什么没有执行表达式 1?

【问题讨论】:

    标签: php switch-statement case boolean-expression


    【解决方案1】:

    您没有正确使用 switch 语句。它们的工作方式是将每个案例值与初始 switch 值进行比较。

    在你的情况下,让我们假装$location = null;

    echo empty($location);    // true: null is considered empty.
    
    switch ($location) {
        case empty($location) :    // this performs the check:
                                   // $location == empty($location)
                                   //      null == true ==> false
    

    所以这就是它不运行的原因..

    在这种情况下,我建议坚持使用if .. else

    【讨论】:

    • 但是case ($location%10000==0)没有问题:表达式2;休息; case ($location%100==0): 表达式 3;
    • 好的,好好考虑一下:$location = 20000,因此$location % 10000 == 0)true20000 == true 是真的,因此它有效。如果您出于某种原因真的想坚持使用这种格式,请将您的 switch 语句更改为:switch (true) {
    • 您的回答和 cmets 非常有帮助。谢谢你,@nickf。
    【解决方案2】:

    empty 函数返回布尔值 1 或 0 http://uk3.php.net/empty

    switch / case 语句检查变量是否包含某个值并根据该值执行表达式

    在您的情况下,如果 $location==1 的值(您在键入 switch($location) 时有效地要求),则应该执行 expression 1

    所以你上面代码的逻辑是:

    如果 $location==1,执行表达式 1
    如果 $location%10000==0,则执行表达式 2
    等等等等。

    $location==1的值吗?

    【讨论】:

      【解决方案3】:

      switch 语句与 if/else 语句不同。 Switch 语句正在寻找特定的值。如果它找到在给定的case 语句中指定的值,它会运行该case 语句之后的代码。

      以下代码:

      switch($x)
          case 1:
              // some stuff
              break;
          case 2:
              // some other stuff
              break;
          default:
              // some more stuff
              break;
      

      是否相当于这段代码:

      if($x == 1){
          // some stuff
      }
      elseif($x == 2){
          // some other stuff
      }
      else{
          // some more stuff
      }
      

      基本上,switch 语句是 if/elseif/else 块的快捷方式,您可以在其中检查单个变量与一堆可能性的相等性。

      由于 empty() 返回 0 或 1,如果 $location 为 1(如果 $location 为空)或 0(如果 $location 不为空),则您的第一个 case 将运行。这几乎就像你写了以下内容:

      elseif($location == empty($location)){ ...
      

      有意义吗?您可能需要以下语句,而不是使用 switch 语句:

      if(empty($location)){
          // ...
      }
      elseif($location % 10000 == 0){
          // ...
      }
      // ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-18
        • 2021-01-04
        • 1970-01-01
        • 2018-06-25
        • 1970-01-01
        • 2013-01-04
        • 1970-01-01
        • 2014-04-24
        相关资源
        最近更新 更多