返回始终返回false

时间:2013-05-10 04:33:47

标签: php oop class

问题是这个函数总是给我0.为什么?

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

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

3 个答案:

答案 0 :(得分:5)

编辑:

忽略我之前的回答。愚蠢的虚假价值观。你总是得到0的原因只是因为......你的数组中有一个值。正如@Orangepill在评论中所述,转储$this->token$_SESSION['token]的值以查看正在发生的事情。

旧:

count()返回数组中的元素数。现在你正在运行count()。您需要将其与整数值进行比较,即:。

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

答案 1 :(得分:0)

Token是一个mt_rand函数,这就是我认为问题出在return语句的原因。另外,因为即使我调用另一个名为valid_data()的函数,我也会收到错误,它具有相同的return语句。 $ token = $ _SESSION ['token'] = md5(uniqid(mt_rand(),true));

答案 2 :(得分:0)

在使用valid_token()之前,您是否在类中初始化了$ this->错误?如果没有,您可能正在计算未设置的内容,这将返回false。确保您像这样初始化成员:

protected $ error = array();

public $ error = array();

此外,您使用了三元表达式,但未将条件括在括号中。因此,该声明可能未正确评估。试试这个:

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

我同意您应该“转储”变量以查看您的回复。我会通过将其字符串值记录到Apache error.log来执行此操作:

error_log(“this token:”。print_r($ this-> token,true));

error_log(“session token:”。print_r($ _ SESSION ['token'],true));

error_log(“此错误:”。print_r($ this-> error,true));

在GNU / Linux或OSX中你可以像这样从控制台拖尾:

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

这样您就不必中断程序流程来调试它。

最后,这只是一个建议 - valid_token()不是一个好的方法名称,它听起来像一个变量名。 validate_token()或validateToken()是更好的名称,因为它们使用动词来表示它们是动作。