返回总是返回false(Return always return false)

2019-09-02 11:03发布

问题是,这个函数总是返回0我为什么?

public function valid_token ()
{
    if (!isset($_SESSION['token']) || $this->token != $_SESSION['token'])
    {
        $this->errors[] = "Formulario incorrecto";
    }

return count($this->errors)? 0 : 1;
}

Answer 1:

编辑:

忽略我以前的答案。 愚蠢falsy值。 究其原因,你总是得到一个0的回报是,只是因为......你有你的阵列内的值。 作为@Orangepill在评论中指出,自卸值$this->token$_SESSION['token] ,看看发生了什么事情。

旧:

count()返回一个数组中的元素的数量。 现在你只是运行count() 你需要把它比作一个整数值,即:

count($this->errors)>0 ? 0 : 1;


Answer 2:

令牌是mt_rand功能,那为什么我认为这个问题是在return语句。 也因为我得到的错误,甚至当我调用另外一个函数valid_data(),具有相同的return语句。 $令牌= $ _SESSION [ '令牌'] = MD5(uniqid(mt_rand(),真));



Answer 3:

你在你的类中valid_token使用它()之前初始化这个 - $>错误? 如果没有,你可以计算的东西,没有设置,这将返回false。 确保你初始化成员如下:

保护$误差=阵列();

要么

公共$误差=阵列();

此外,您使用的三元表达,但你没有包装在括号中的状态。 因此,该声明可能没有适当地评估。 试试这个:

 $isValidForm = (count($this->errors) > 0) ? false : true;
 return $isValidForm;

我同意,你应该“倾销”的变量,看看你找回。 我会通过自己的字符串值记录到Apache的error.log中做到这一点:

error_log中( “此令牌:” 的print_r($这个 - >标记,真));

error_log中( “会话令牌:” 的print_r($ _ SESSION [ '令牌'],真实));

error_log中( “这个错误:” 的print_r($这个 - >错误,真));

在GNU / Linux或OSX你可以从尾巴像这样的控制台日志:

尾-f /var/log/apache2/error.log

这样,您就不必中断程序调试它的流动。

最后,这只是一个建议 - valid_token()是不是一个很好的方法名,这听起来像一个变量名。 validate_token()或validateToken()是更好的名字,因为他们使用的动词,以表明他们的行动。



文章来源: Return always return false
标签: php oop class