为什么即使echo empty($ location)打印出1,也没有执行相应的语句

时间:2009-12-13 04:30:17

标签: php switch-statement case boolean-expression

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;

}

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

在您的情况下,如果expression 1的值(您在键入$location==1时有效地询问了这一点),则应执行switch($location)

所以上面代码的逻辑是:

  

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

$location==1

的值

答案 2 :(得分:0)

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,如果case为1(如果$location为空)或0(如果$location,则第一个$location将会运行不是空的)。这几乎就像你写了以下内容:

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

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

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