Var_dump 改变了我的变量 "something"?

Var_dump changes "something" in my variable?

所以我目前正在 PHP 5.6.10 中编写用户注册代码,并且刚刚发现了一些奇怪的东西:函数 Token::check(Input::get( 'token')) returns 布尔值。如果它 returns 为真,则执行 if 语句。到目前为止工作正常,但是当我 var_dump 它在 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>";
            }
        }
    }

(希望我在缩短代码时没有打错字) 这是请求的 check() 函数:

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;
} 

基于 check 方法的代码:

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(Input::get('token')));

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

if(Token::check(Input::get('token')))待会.

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

 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; 
}