我知道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的用途。有什么想法吗?
答案 0 :(得分:3)
问题是名称空间。 function_exists
检查根命名空间,而在命名空间MatchFixers\Helpers
中定义它。这意味着它会检查\hash_equals
,但会将函数创建为\MatchFixers\Helpers\hash_equals
。要解决此问题,您需要将命名空间添加到检查:
if(!function_exists(__NAMESPACE__ . '\hash_equals'))
有趣的是,documentation中没有提到这一点。
修改强>
虽然我实际上建议在根命名空间中检查并创建函数。然后,这允许在其他名称空间中使用它,而无需在每个名称空间中创建新函数。