Php 变量“转储更改”;“什么?”;在我的变量中?

Php 变量“转储更改”;“什么?”;在我的变量中?,php,function,session,token,session-variables,Php,Function,Session,Token,Session Variables,因此,我目前正在用PHP5.6.10编写一个用户注册代码,刚刚发现了一些奇怪的东西:函数Token::check(Input::get('Token'))返回一个布尔值。如果返回true,则执行If语句。到目前为止工作正常,但是当我将其转储到if语句之前时,if语句没有被执行 这种行为有什么解释吗 var_dump(Token::check(Input::get('token'))); if(Input::exists()) { if(Token::check

因此,我目前正在用PHP5.6.10编写一个用户注册代码,刚刚发现了一些奇怪的东西:函数Token::check(Input::get('Token'))返回一个布尔值。如果返回true,则执行If语句。到目前为止工作正常,但是当我将其转储到if语句之前时,if语句没有被执行

这种行为有什么解释吗

   var_dump(Token::check(Input::get('token')));

   if(Input::exists()) {       
    if(Token::check(Input::get('token'))) {         
        echo "Loop.";
        $validate = new Validate();
        $validation = $validate->check($_POST, array(
            'first_name' => array(
                'required' => true,
                'min' => 1,
                'max' => 50
            )  
        ));


        if($validation->passed()) {
            echo "Die Eingaben waren korrekt.";
        } else {
            foreach ($validation->errors() as $error) {
                echo $error,"<br>";
            }
            echo "<br>";
            }
        }
    }

根据
检查方法中的代码:

public static function check($token) { 
    $tokenName = Config::get('session/token_name');  
    if(Session::exists($tokenName) && $token === Session::get($tokenName)){ 
        Session::delete($tokenName); 
        return true; 
    } 
    return false; 
}
在您第一次呼叫时:

var_dump(Token::check(输入::get('Token'))

它从会话中删除令牌,从而防止出现以下情况:

if(Token::check(Input::get('Token'))
需要满足

也许您可以在check函数中添加一个额外的参数,以帮助您调试而不是删除令牌:

 public static function check($token, $test = false) { 
    $tokenName = Config::get('session/token_name');  
    if(Session::exists($tokenName) && $token === Session::get($tokenName)){ 
        if (!$test) {
            Session::delete($tokenName); 
        }
        return true; 
    } 
    return false; 
}

没有“如果循环”!“如果”不能循环。如果不想执行循环,则必须使用“while”、“do…while”、“for”或“foreach”。什么标记::check可以执行?也许令牌不能检查两次?@Candyman1332是的,你说得对。在我的文本中,将单词“loop”替换为“statement”。这称为副作用,使函数不是幂等函数。如果你的函数总是只根据其输入返回相同的值,而实际上它并没有这样做(它或多或少随机返回一些值),那么它要么是一个无意义的函数,要么是一个简单的bug。哦,该死,是的,这绝对有道理。我应该自己能弄明白的。非常感谢你的帮助!没问题,很高兴我能帮忙:)
 public static function check($token, $test = false) { 
    $tokenName = Config::get('session/token_name');  
    if(Session::exists($tokenName) && $token === Session::get($tokenName)){ 
        if (!$test) {
            Session::delete($tokenName); 
        }
        return true; 
    } 
    return false; 
}