Var_dump改变了我的变量中的“东西”?

时间:2016-03-03 14:14:17

标签: php function session token session-variables

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

1 个答案:

答案 0 :(得分:1)

基于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')))

也许你可以在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; 
}