Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于php中开关条件的问题_Php_Comparison_Switch Statement - Fatal编程技术网

关于php中开关条件的问题

关于php中开关条件的问题,php,comparison,switch-statement,Php,Comparison,Switch Statement,我希望有人能知道我为什么会得到以下结果,因为我期待着其他的东西 $x = NULL; switch ($x) { case "0": echo "String"; break; case 0: echo "Integer"; break; case NULL: echo "NULL"; break; case FALSE: echo "Bo

我希望有人能知道我为什么会得到以下结果,因为我期待着其他的东西

$x = NULL;
switch ($x) {
    case "0": 
        echo "String"; 
        break;
    case 0: 
        echo "Integer"; 
        break;
    case NULL: 
        echo "NULL"; 
        break;
    case FALSE: 
        echo "Boolean"; 
        break;
    case "": 
        echo "Empty string"; 
        break;
    default: 
        echo "Something else"; 
        break;
}
// outputs "Integer" was expecting "NULL"

$x=6;
switch ($x) {
    case "6b": 
        echo "6b"; 
        break;
    case "6": 
        echo "6 empty"; 
        break;
    case 6: 
        echo "6 full"; 
        break;
    default: 
        echo "6 half";
        break;
}
// outputs "6b" was expecting "6 empty"
注:

请注意,开关/外壳没有松动的比较

因此,不要像:$x==0这样进行比较,而是做$x==0

注意:

请注意,开关/外壳没有松动的比较


因此,在进行$x=0的比较时,$x==0自动转换为整数,而不是像:$x==0这样进行比较。您可能希望改用if/else if结构,并使用$x==0进行比较表示严格等于。

$x在进行比较时自动转换为整数$x=0。您可能希望改用if/else if结构,并使用$x==0进行比较表示严格等同于本手册:

请注意,开关/外壳没有松动的比较

它将首先检查NULL==0(与字符串一样为NULL)是否为0

NULL as integer为0,因此将匹配-printing integer

对于6,它将把大小写转换为整数-6b将变成相等的6

这是因为:

NULL != "0";
NULL == 0;

"6b" == 6;
手册:

请注意,开关/外壳没有松动的比较

它将首先检查NULL==0(与字符串一样为NULL)是否为0

NULL as integer为0,因此将匹配-printing integer

对于6,它将把大小写转换为整数-6b将变成相等的6

这是因为:

NULL != "0";
NULL == 0;

"6b" == 6;

switch/case所做的比较与类型转换一起工作

基本上,它使用==运算符,而不是===运算符

引述:

如果将数字与字符串进行比较,或者比较涉及 数字字符串,然后将每个字符串转换为一个数字 进行数值比较。这些规则也适用于交换机 声明


switch/case所做的比较与类型转换一起工作

基本上,它使用==运算符,而不是===运算符

引述:

如果将数字与字符串进行比较,或者比较涉及 数字字符串,然后将每个字符串转换为一个数字 进行数值比较。这些规则也适用于交换机 声明


虽然你是对的,但我认为你引用了错误的段落。讨论中的比较根本不涉及字符串。至少在OP的第二个例子中,有字符串、整数和数字字符串,而不是第一个。哦,好的,还有第二个。哇,多么不准确的问题>。虽然你是对的,但我认为你引用了错误的段落。讨论中的比较根本不涉及字符串。至少在OP的第二个例子中,有字符串、整数和数字字符串,而不是第一个。哦,好的,还有第二个。哇,多么不准确的问题>。