【问题标题】:Sessions inside PHP classes [duplicate]PHP类中的会话[重复]
【发布时间】:2012-05-18 23:47:57
【问题描述】:

可能重复:
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 的值保持旧值,直到我再次刷新页面。这有什么解释?以及如何使类内的值立即改变?

【问题讨论】:

  • 错了不是重复

标签: php oop session


【解决方案1】:

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

【讨论】:

  • 效果很好我的朋友:gist.github.com/2726195
  • 我建议将会话作为参数传递:webchanics_e_translations_session_master($session)。反正哪个更干净。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    您必须存储引用,而不仅仅是值。

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

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

    【讨论】:

      猜你喜欢
      • 2014-10-29
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 2011-12-09
      • 2013-07-24
      • 1970-01-01
      相关资源
      最近更新 更多