PHP文字列==比較演算子の副作用

843 ワード

 
  
$a = '212345678912000005';
$b = '212345678912000001';
var_dump($a == $b);

このコードの出力はbool(true)であり、このように判断すると両者が等しいと結論する.類似の特性はin_array()関数の3番目のパラメータがfalseであるか、設定しない場合.文字列が数字かどうかを判断し、longまたはdouble(C言語データ型)に変換してから判断-zendi_を使用するためです.smart_strcmp. しかし、ソースコードのコメントはオーバーフローを考慮したと述べています.
 
  
} else if (dval1 == dval2 && !zend_finite(dval1)) {
    /* Both values overflowed and have the same sign,
     * so a numeric comparison would be inaccurate */
    goto string_cmp;
}

dval 1とdval 2は、それぞれ2つの文字列がdouble型に変換する値である.でもどうしてそうなの?この判断は正しくないかもしれない.さらに検討してから...
解決策は、2つの等号"==="の代わりに3つの等号"==="を使用し、in_array()関数3番目のパラメータをtrue:in_に設定array('val', $array, true).