switch难道不是这样的写的吗? ssid去哪了?
在别的群看到这个问题
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></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>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu
