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

の値$_SESSION['language']toに代入しています$this->current_language。つまり、 にアクセスすると、同じメモリ位置への参照ではなく、PHP$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 に答える