먼저 수요 배경을 소개합니다:
송장 방법:
0=기부(이유, 역사적 이유는 묻지 마세요)
1=배송 일치
2=요청
3=전자 송장
이제 사용자가 제출한 데이터를 확인해야 합니다.
php;auto-links:false;">if(!in_array($_POST['invoice_action'], array(0,1,2,3))){ throw new Exception('请选择正确的发票方式'); }
이때 문제가 발생하는데 $_POST['invoice_action'] 값이 전혀 존재하지 않는데 왜 예외가 발생하지 않는 걸까요?
이것이 함정인 것으로 확인되었습니다.
이 코드 세트를 보세요:
echo in_array('', array(0)) ? 1 : 0; // 结果:1 echo in_array(null, array(0)) ? 1 : 0; // 结果:1 echo in_array(false, array(0)) ? 1 : 0; // 结果:1
이렇게 큰 구덩이를 우회하거나 채워야 할까요? 방법 1: in_array는 세 번째 매개변수를 지원하여 데이터 유형 감지를 강제합니다
echo in_array('', array(0), true) ? 1 : 0; // 结果:0 echo in_array(null, array(0), true) ? 1 : 0; // 结果:0 echo in_array(false, array(0), true) ? 1 : 0; // 结果:0
echo in_array('', array('0'), true) ? 1 : 0; // 结果:0 echo in_array(null, array('0'), true) ? 1 : 0; // 结果:0 echo in_array(false, array('0'), true) ? 1 : 0; // 结果:0