2017-07-13 8 views
0

私はキーでセッション変数を取得し、それを変数に再割り当てする関数を持っています。セッション変数の設定を解除し、設定した変数を返します。何らかの理由でそれが返ってきています。私がunsetを取り除くと、うまくいく。セッション変数で奇妙なunset()問題

これはヌル

if(isset($_SESSION[$key])) { 
      $session_variable = $_SESSION[$key]; 
      var_dump($session_variable); 
      unset($_SESSION[$key]); 
      var_dump($session_variable); 
      return $session_variable; 
     } 
    return ''; 

を返すこれは

if(isset($_SESSION[$key])) { 
      $session_variable = $_SESSION[$key]; 
      var_dump($session_variable); 
//   unset($_SESSION[$key]); 
      var_dump($session_variable); 
      return $session_variable; 
     } 
     return ''; 

を省略されたときに解除変数$ session_variableを削除して、なぜ未設定の私は理解していない、正しい出力を返します。前の変数

EDIT

セッションはこの

$_SESSION['action'] = ['message' => 'bla', 'status' => 'success']; 

のように設定されている機能は、それは$_SESSION[$key]が本当に何であるかに依存します。この

(new Request)->getFlashedSessionVar('action'); //For testing 
+0

あなたのコードは私のために未設定のセッションを省略せずに正常に動作しているため、その作業罰金。 – Sahathulla

+0

PHPフレームワークを使用しているのですか? – Ronald

+0

私は従来のカスタムフレームワークを使用していますが、そのほとんどは生のPHPです。私は別の設定されていない関数を探しましたが、存在しないので、上書きされていません。私も間違いがあるので、何かが間違っているかどうかを確認する必要があります。 –

答えて

1

のように呼ばれています。 PHPのドキュメントによると:An exception to the usual assignment by value behaviour within PHP occurs with objects, which are assigned by reference in PHP 5. Objects may be explicitly copied via the clone keyword.

これは、参照によって割り当てることができ、したがって同じオブジェクトを設定解除できることを意味します。

こちらをお読みください:私はちょうど生のPHPでコードをテストしPHP Assignment Operators

+0

また、両方ともvar_dumpsは、unsetが追加されたときに何も出力しません。 var_dumpはunset関数の前に表示されます。 $ _SESSION [$ key]は標準の割り当てです。例:$ _SESSION ['action'] = [1,2] –

1

。私

コード

​​

出力

array(2) { [0]=> int(1) [1]=> int(2) } array(2) { [0]=> int(1) [1]=> int(2) } 
+0

ありがとうございます。もっと深く掘り下げなければなりません。ありがとう –