PHPで緩い比較演算子( "==")を使用していますか?

PHPで文字列を比較する場合、「==」演算子は最初に文字列を数値[1] [2]に変換しようとするため( 両方のオペランドが文字列であっても)、予期しない結果になることがあります。

<?php
var_dump('123' == '       123'); // true
var_dump('1e3' == '1000'); // true
var_dump('+74951112233' == '74951112233'); // true
var_dump('00000020' == '0000000000000000020'); // true
var_dump('0X1D' == '29E0'); // true
var_dump('0xafebac' == '11529132'); // true
var_dump('0xafebac' == '0XAFEBAC'); // true
var_dump('0xeb' == '+235e-0'); // true
var_dump('0.235' == '+.235'); // true
var_dump('0.2e-10' == '2.0E-11'); // true
var_dump('61529519452809720693702583126814' == '61529519452809720000000000000000'); // true  php < 5.4.4

      
      





. , in_array:

<?php
$_GET['fileId'] = '0X1D';
// ...
$privateFileIds = array('29E0');
if (in_array(@$_GET['fileId'], $privateFileIds))
{
	print 'Access deny';
	exit;
}

//  "Access deny", ..  "$strict"   "in_array"    "false"

      
      





:

//           
(string) $aaa === (string) $bbb;

//   "strcmp"
strcmp($aaa, $bbb) === 0;

//   "$strict"   "true"   
in_array((string) $aaa, $array, true);

      
      





.



UPD: v0s , "strcmp" "==" ( "===").



All Articles