Php 返回总是返回false
问题是这个函数总是返回0。为什么?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; } 编辑: 忽略我先前的回答。
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));