隐式类型转换与hash值比较

❗️❗️❗️HASH值比较请使用 ===,杜绝隐式类型转换。

<?php
var_dump(md5('240610708') == md5('QNKCDZO'));
var_dump(md5('aabg7XSs') == md5('aabC9RqS'));
var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));
var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));
var_dump('0010e2' == '1e3');
var_dump('0x1234Ab' == '1193131');
var_dump('0xABCdef' == '     0xABCdef');

Output for 7.0.0 - 7.1.4

前5个被隐式转类型后比较数值相等;

bool(true)
bool(true)
bool(true)
bool(true)
bool(true)

// PHP7.0 含有十六进制数字的字符串不再被视为数字 

// '0x1234Ab' -> int 0
// 0 == 1193131
bool(false)

// 字符串比较不相等
bool(false)

Output for 5.0.0 - 5.0.2, 5.2.1 - 5.6.30

全部被隐式转类型后比较数值相等;

bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
<?php
function expr($hash, $a, $b) {
    $ha = $hash($a);
    $hb = $hash($b);
    if ($ha == $hb) {
        echo "$hash('$a') $ha  <EQ>  $hash('$b') $hb\n";
    } else {
        echo "$hash('$a') $ha  <NOT EQ>  $hash('$b') $hb\n";
    }
}

expr("md5", '240610708', 'QNKCDZO');
expr("md5", 'aabg7XSs', 'aabC9RqS');
expr("sha1", 'aaroZmOk', 'aaK1STfY');
expr("sha1", 'aaO8zKZF', 'aa3OFF9m');
md5('240610708') 0e462097431906509019562988736854  <EQ>  md5('QNKCDZO') 0e830400451993494058024219903391
md5('aabg7XSs') 0e087386482136013740957780965295  <EQ>  md5('aabC9RqS') 0e041022518165728065344349536299
sha1('aaroZmOk') 0e66507019969427134894567494305185566735  <EQ>  sha1('aaK1STfY') 0e76658526655756207688271159624026011393
sha1('aaO8zKZF') 0e89257456677279068558073954252716165668  <EQ>  sha1('aa3OFF9m') 0e36977786278517984959260394024281014729

说明

results matching ""

    No results matching ""