在别的群看到这个问题
ssid去哪了?
在别的群看到这个问题
ssid去哪了?
我们可以在一些地方进行 echo 输出变量,如以下代码所示。
<code><?php
$filed = array(0, 707, 708, 'ssid');
$dd = array();
foreach ($filed as $value) {
echo $value . "\n";
switch ($value) {
case 0:
$filedStr = 'sindex';
break;
case 707:
$filedStr = 'login';
break;
case 708:
$filedStr = 'register';
break;
case 'ssid':
$filedStr = 'ssid';
echo $filedStr;
break;
default:
break;
}
}</code>在结果中,我们可以发现,echo $filedStr;这步并没有输出。
这个时候,就应该看PHP官方文档里,为什么会导致这样,原因就出于 switch。
在PHP官方文档,什么,这是英文的,当然也有中文的。里面有句话:
Attention if you have mixed types of value in one switch statemet it can make you some trouble
当然底下给出了一种方案:
<code><?php
$string="2string";
switch($string)
{
case (string) 1:
echo "this is 1";
break;
case (string) 2:
echo "this is 2";
break;
case '2string':
echo "this is a string";
break;
}
?></code>里面提到了 PHP 用了动态类型转换,也就是这篇博客里讲的。
动态语言的变量类型是随存储的变量而变化的,即变量类型是根据具体环境而进行变化的。
当 $value 值为 'ssid' 时,执行到 case 0 的时候,要转换为整形和其做比较,因为转换之后相等,所以匹配不到后面的 'ssid' 。
switch匹配里, case是整数, 这会导致在匹配的时候把字符串强制转换为integer, ssid转为int为0, 是不会匹配到case 'ssid'的
ssid肯定没有匹配到
谢谢大家的回答,已经懂了.
<code>// 只取出以合法数字开始整型和浮点型,取到第一个非法数字截止...
intval('1234ssid');// 1234
intval('ssid');// 0
var_dump('ssid' == 0);//so, 这里就为`true`,就会执行它所对应的代码段.ssid想再去匹配已经没有机会了哈
</code>
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号