最初に需要の背景を紹介します:
請求方法:
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'] がまったく存在しない場合、なぜ例外がスローされないのでしょうか?
確認後、これが PHP の動作です 弱い型付け言語の落とし穴、そうです、これは落とし穴です このコードセットを見てください: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
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