PHP类中的会话

时间:2012-05-18 15:44:01

标签: php oop session

  

可能重复:
  Checking a session variable in a PHP class

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

此代码根据某些条件设置会话,并调用此会话中的值。在课堂之外,会话的新值立即可用,但在课堂内,$ this-> current_language的值仍然是旧的,直到我再次刷新页面。对此有何解释?以及如何使类内的值立即改变?

3 个答案:

答案 0 :(得分:1)

您正在按价值进行转让,而不是通过参考 参考:$this->current_language = &$_SESSION['language'];

答案 1 :(得分:0)

您正在将$_SESSION['language']分配给$this->current_language,这意味着当您访问$this->current_language时,您正在让PHP执行$_SESSION['language']的副本(PHP仅在需要时复制),而不是对相同内存位置的引用。

您可以改为处理$this->current_language,并在阻止结束时将其同步回$_SESSION['language']或完全省略$this->current_language,然后只需访问$_SESSION

答案 2 :(得分:0)

您必须存储参考,而不仅仅是值。

$this->current_language = &$_SESSION['language'];

请在PHP.net上查看此article about PHP references