>  기사  >  백엔드 개발  >  스위치는 이렇게 쓰여있지 않나요? ssid는 어디로 갔나요?

스위치는 이렇게 쓰여있지 않나요? ssid는 어디로 갔나요?

WBOY
WBOY원래의
2016-08-18 09:15:472742검색

다른 그룹에서 이 질문을 봤습니다
ssid는 어디로 갔나요?
스위치는 이렇게 쓰여있지 않나요? ssid는 어디로 갔나요?

스위치는 이렇게 쓰여있지 않나요? ssid는 어디로 갔나요?

답글 내용:

다른 그룹에서 이 질문을 봤습니다
ssid는 어디로 갔나요?
스위치는 이렇게 쓰여있지 않나요? ssid는 어디로 갔나요?

스위치는 이렇게 쓰여있지 않나요? ssid는 어디로 갔나요?

다음 코드와 같이 일부 위치에서 출력 변수를 에코할 수 있습니다.

<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; 이 단계에서는 출력이 없음을 알 수 있습니다.

스위치는 이렇게 쓰여있지 않나요? ssid는 어디로 갔나요?

이때 왜 이런 일이 발생하는지 알아보려면 공식 PHP 문서를 읽어야 합니다.

PHP 공식 문서에는 뭐, 이건 영어로 되어 있고, 물론 중국어도 있습니다. 그 안에 다음 문장이 있습니다:

하나의 스위치 상태에 여러 유형의 값이 있으면 문제가 발생할 수 있으므로 주의하세요

물론 아래와 같은 계획도 있습니다.

<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로, ssidint로 0이 됩니다. case 'ssid' 매칭

ssid가 확실히 일치하지 않습니다

답변해주셔서 감사합니다. 이해합니다.

<code>// 只取出以合法数字开始整型和浮点型,取到第一个非法数字截止...
intval('1234ssid');// 1234
intval('ssid');// 0
var_dump('ssid' == 0);//so, 这里就为`true`,就会执行它所对应的代码段.ssid想再去匹配已经没有机会了哈
</code>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.