0

可能重复:
检查 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'];
            }
        }  
    }

此代码根据某些条件设置会话,并调用此会话中存储的值。在类外,会话的新值立即可用,但在类内 $this->current_language 的值保持旧值,直到我再次刷新页面。这有什么解释?以及如何使类内的值立即改变?

4

3 回答 3

1

您正在按值进行分配,而不是按引用进行分配。
参考做:$this->current_language = &$_SESSION['language'];

于 2012-05-18T15:47:54.193 回答
0

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

您可以改为处理$this->current_language,并在块的末尾,将其同步回$_SESSION['language']或完全省略$this->current_language并仅访问$_SESSION.

于 2012-05-18T15:46:29.420 回答
0

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

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

请参阅这篇关于PHP.net 上的PHP 参考的文章。

于 2012-05-18T15:47:30.263 回答