PHP函数存在Hash Equals Redeclared

时间:2015-08-31 19:23:00

标签: php

我知道hash_equals是一个PHP 5.6> =函数,我正在开发的服务器无意从5.5更新到5.6,所以我建议我使用类似的函数来实现相同的效果

public function hashCheck($know, $user)
{
    if(!function_exists('hash_equals')) {
      function hash_equals($str1, $str2) {
        if(strlen($str1) != strlen($str2)) {
          return false;
        } else {
          $res = $str1 ^ $str2;
          $ret = 0;
          for($i = strlen($res) - 1; $i >= 0; $i--) $ret |= ord($res[$i]);
          return !$ret;
        }
      }
    }
    return hash_equals($know, $user);
}

我得到的问题是一个错误,说它已经被声明了。现在我很确定即使它被声明在其他地方就是function_exists的用途。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

问题是名称空间。 function_exists检查根命名空间,而在命名空间MatchFixers\Helpers中定义它。这意味着它会检查\hash_equals,但会将函数创建为\MatchFixers\Helpers\hash_equals。要解决此问题,您需要将命名空间添加到检查:

if(!function_exists(__NAMESPACE__ . '\hash_equals'))

有趣的是,documentation中没有提到这一点。

修改

虽然我实际上建议在根命名空间中检查并创建函数。然后,这允许在其他名称空间中使用它,而无需在每个名称空间中创建新函数。