在別的群組看到這個問題
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到
case 'ssid'的
ssid肯定沒有配對到
謝謝大家的回答,已經懂了.
<code>// 只取出以合法数字开始整型和浮点型,取到第一个非法数字截止... intval('1234ssid');// 1234 intval('ssid');// 0 var_dump('ssid' == 0);//so, 这里就为`true`,就会执行它所对应的代码段.ssid想再去匹配已经没有机会了哈 </code>