首頁  >  文章  >  後端開發  >  switch不是這樣的寫的嗎?ssid去哪了?

switch不是這樣的寫的嗎?ssid去哪了?

WBOY
WBOY原創
2016-08-18 09:15:472742瀏覽

在別的群組看到這個問題
ssid去哪了?
switch不是這樣的寫的嗎?ssid去哪了?

switch不是這樣的寫的嗎?ssid去哪了?

回覆內容:

在別的群組看到這個問題
ssid去哪了?
switch不是這樣的寫的嗎?ssid去哪了?

switch不是這樣的寫的嗎?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;這步並沒有輸出。

switch不是這樣的寫的嗎?ssid去哪了?

這個時候,就應該看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>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn