다른 그룹에서 이 질문을 봤습니다
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;
이 단계에서는 출력이 없음을 알 수 있습니다.
이때 왜 이런 일이 발생하는지 알아보려면 공식 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
로, ssid
은 int
로 0이 됩니다. case 'ssid'
매칭
ssid가 확실히 일치하지 않습니다
답변해주셔서 감사합니다. 이해합니다.
<code>// 只取出以合法数字开始整型和浮点型,取到第一个非法数字截止... intval('1234ssid');// 1234 intval('ssid');// 0 var_dump('ssid' == 0);//so, 这里就为`true`,就会执行它所对应的代码段.ssid想再去匹配已经没有机会了哈 </code>