Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.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 当比较字母和数字时,开关返回TRUE。为什么?_Php_Switch Statement - Fatal编程技术网

Php 当比较字母和数字时,开关返回TRUE。为什么?

Php 当比较字母和数字时,开关返回TRUE。为什么?,php,switch-statement,Php,Switch Statement,简短的问题:为什么 调用时,下面的类返回ALL-right:Status::validate('ab') 破案 switch($condition){ case "options": blah(); break; } 我相信这是因为您的$status被强制转换为int $value = 'abc'; $other_value = '21abc'; echo (int)$value; echo '<br>'; echo (int)$other_va

简短的问题:为什么

调用时,下面的类返回ALL-right:
Status::validate('ab')

破案

     switch($condition){
      case "options": blah(); break;
      }

我相信这是因为您的
$status
被强制转换为int

$value = 'abc';
$other_value = '21abc';

echo (int)$value;
echo '<br>';
echo (int)$other_value;
这将导致它认为
ab
value等于
Status::FRESH

但我不确定
switch
语句是否执行这种类型的类型转换

编辑 我想我是对的。更多信息请点击此处。

这里是关于将字符串类型转换为整数的引用。

我想知道它是否返回该值,因为它是case语句的最后一个,或者它的值实际上达到了50。当您交换取消的行和挂起的行并将其保留在原来的位置时会发生什么情况?如果有一种情况涉及到匹配
int
,那么它将为开关中的所有比较将条件值强制转换为
int
,即使开关中存在字符串比较。至少测试显示了这一点
0==(int)'ab'
(您使用'abc'显示)这并不能解释值
'ab'
与“正确”大小写匹配的原因。
$value = 'abc';
$other_value = '21abc';

echo (int)$value;
echo '<br>';
echo (int)$other_value;
0
21