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的值仍然是旧的,直到我再次刷新页面。对此有何解释?以及如何使类内的值立即改变?
答案 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。