用TRUE调用函数返回错误的东西



我有这个函数

//$hasher is a phpass object.    
public function getHash( $check )
    {
    global $hasher;
    if ( $check == 'hash' )
        {
        return $hasher->HashPassword($this->password);
        }
    else if ( $check == 'check' )
        {
        return $hasher->CheckPassword($this->password, $this->getData('data')['password']);
        }
    else
        {
        return 'F*** off';
        }
    }

当我称之为时

$obj->getHash('hash')
//getHash(): $2a$08$Uof.EzLkJI..........
$obj->getHash('check')
//getHash(): 1
$obj->getHash('dsadaldas') //and anything else in the brackets
//getHash():F*** off
$obj->getHash(TRUE)
//getHash(): $2a$08$3vNYnGVsf...

为什么用TRUE调用方法会返回与我用'hash'作为参数调用方法相同的结果?我是不是遗漏了什么?我用switch()试过了,它的行为仍然一样。

因为使用相等运算符(==)时,像hash这样的字符串的求值结果为true

您可以使用相同的(===)运算符:

if ( $check === 'hash' )

这样可以确保变量的值和类型是相同的。

这是因为当比较布尔值(true)和字符串("hash")时,字符串会转换为布尔值,而不是相反。

解决方案:使用类型安全比较(===

最新更新