使用TRUE调用函数会返回错误的内容

时间:2013-02-15 12:42:36

标签: php

我有这个功能

//$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()尝试了它,它的行为仍然相同。

2 个答案:

答案 0 :(得分:2)

因为当您使用相等运算符(hash)时,true之类的字符串的计算结果为==

您可以使用相同的(===operator代替:

if ( $check === 'hash' )

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

答案 1 :(得分:0)

这是因为当您将布尔值(true)与字符串("hash")进行比较时,字符串会获得converted to boolean,而不是相反。

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