Php 返回总是返回false

Php 返回总是返回false,php,oop,class,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; } 编辑: 忽略我先前的回答。

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

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

return count($this->errors)? 0 : 1;
}
编辑: 忽略我先前的回答。愚蠢的虚假价值观。您总是得到
0
作为回报的原因很简单,因为……您的数组中有一个值。正如@Orangepill在注释中所述,转储
$this->token
$\u SESSION['token]
的值以查看发生了什么

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

count($this->errors)>0 ? 0 : 1;
编辑: 忽略我先前的回答。愚蠢的虚假价值观。您总是得到
0
作为回报的原因很简单,因为……您的数组中有一个值。正如@Orangepill在注释中所述,转储
$this->token
$\u SESSION['token]
的值以查看发生了什么

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

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

Token是一个mt_rand函数,所以我认为问题出在return语句上。另外,因为即使在调用另一个名为valid_data()的函数时,也会出现错误,该函数具有相同的返回语句$token=$\u会话['token']=md5(uniqid(mt_rand(),true))

令牌是一个mt_rand函数,因此我认为问题出在return语句上。另外,因为即使在调用另一个名为valid_data()的函数时,也会出现错误,该函数具有相同的返回语句$token=$\u会话['token']=md5(uniqid(mt_rand(),true))

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

受保护的$error=array()

public$error=array()

另外,您使用了三元表达式,但没有将条件括在括号中。因此,该语句的计算可能不正确。试试这个:

 $isValidForm = (count($this->errors) > 0) ? false : true;
 return $isValidForm;
我同意你应该“转储”变量,看看你能得到什么。我可以通过将它们的字符串值记录到Apache error.log中来实现这一点:

错误日志(“此令牌:”.print\r($this->token,true))

错误日志(“会话令牌:”.print\r($\u会话['token',true))

错误日志(“此错误:”.print\r($this->error,true))

在GNU/Linux或OSX中,您可以从控制台跟踪日志,如下所示:

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

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


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

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

受保护的$error=array()

public$error=array()

另外,您使用了三元表达式,但没有将条件括在括号中。因此,该语句的计算可能不正确。试试这个:

 $isValidForm = (count($this->errors) > 0) ? false : true;
 return $isValidForm;
我同意你应该“转储”变量,看看你能得到什么。我可以通过将它们的字符串值记录到Apache error.log中来实现这一点:

错误日志(“此令牌:”.print\r($this->token,true))

错误日志(“会话令牌:”.print\r($\u会话['token',true))

错误日志(“此错误:”.print\r($this->error,true))

在GNU/Linux或OSX中,您可以从控制台跟踪日志,如下所示:

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

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


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

但是0在php中是错误的。理论上他应该能回来!计算($errors)并产生相同的结果。逻辑not将导致隐式转换为布尔型。我会转储$this->token和$\u SESSION[“token”]的内容,这样你就可以看到引擎盖下发生了什么。token是一个mt\u rand函数,这就是为什么我认为问题出在return语句上。另外,因为即使在调用另一个名为valid_data()的函数时,也会出现错误,该函数具有相同的返回语句$token=$\u会话['token']=md5(uniqid(mt_rand(),true));但是0在php中是错误的。理论上他应该能回来!计算($errors)并产生相同的结果。逻辑not将导致隐式转换为布尔型。我会转储$this->token和$\u SESSION[“token”]的内容,这样你就可以看到引擎盖下发生了什么。token是一个mt\u rand函数,这就是为什么我认为问题出在return语句上。另外,因为即使在调用另一个名为valid_data()的函数时,也会出现错误,该函数具有相同的返回语句$token=$\u会话['token']=md5(uniqid(mt_rand(),true));