1

私はこの機能を持っています

//$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場合と同じように、returnを使用してメソッドを呼び出すのはなぜですか?'hash'私はここで何かが欠けていますか?で試してみましたがswitch()、それでも同じように動作します。

4

2 に答える 2

2

等式演算子()を使用すると、などの文字列がhash評価されるため、次のようになります。true==

代わりに、同一の(===演算子を使用できます。

if ( $check === 'hash' )

これにより、変数の値と型の両方が同じになります。

于 2013-02-15T12:44:40.397 に答える
0

これは、ブール値(true)と文字列()を比較する"hash"と、文字列がブール値に変換されるためであり、その逆ではありません。

解決策:タイプセーフな比較を使用する(===

于 2013-02-15T12:47:41.983 に答える