2012-05-18 72 views
0

可能重複內:
Checking a session variable in a PHP class會話PHP類

public function __construct(){ 
     $this->languages  = get_option('test_trans'); 
     $this->default_lang = $this->default_language(); 
     $this->taxonomies = get_taxonomies(array(),'names'); 

     add_action('init', array($this, 'webchanics_e_translations_session_master'), 1); 
     session_start(); 
     $this->current_language = $_SESSION['language']; 

    } 


    function webchanics_e_translations_session_master(){  
     if(!$this->languages){ 
      unset($_SESSION['language']); 
     }else{ 
      $check_lang_by_session = $this->check_language($_SESSION['language']); 
      if(!$check_lang_by_session){ 
       $_SESSION['language'] = $this->default_lang; 
      } 

      $check_lang_by_url = $this->check_language($_GET['lang']); 
      if($check_lang_by_url){ 
       $_SESSION['language']=$_GET['lang']; 
      } 
     } 
    } 

此代碼將基於一些條件的會話,並呼叫在這屆stroed值。在課堂外,會話的新值立即可用,但在課程內部,$ this-> current_language的值保持舊值,直到我再次刷新頁面。這是什麼解釋?以及如何讓課堂內的價值立即改變?

+0

這是不對的它,它不是一個重複 –

回答

1

您正在按值進行分配,而不是通過引用。
參考行動:$this->current_language = &$_SESSION['language'];

+0

仍然沒有工作 –

+0

它非常好我的朋友:https://gist.github.com/2726195 –

+1

我建議傳遞會話一個參數:'webchanics_e_translations_session_master($ session)'。無論如何,哪個更清潔。 –

0

您的$_SESSION['language']分配給$this->current_language,這意味着當您訪問$this->current_language,你這是PHP做的$_SESSION['language']複印件(PHP只複製時,它需要),而不是相同的內存位置的參考。

你可以代替處理$this->current_language,並在你的塊結束,同步回$_SESSION['language']或完全忽略$this->current_language,只是訪問$_SESSION