Php 将会话变量放入变量中,并将其全局使用

Php 将会话变量放入变量中,并将其全局使用,php,session,variables,global-variables,Php,Session,Variables,Global Variables,我正在一个项目中工作,其中一个将数据保存在会话变量中。这是一个Wordpress项目,我使用“sd\u向导\u glass\u类型”功能将其作为模板显示在我网站的页面上 如您所见:我首先在变量$glasstype中放入了$_SESSION['showerdoor']['glasstype'] 然后,如果设置了$\u GET['glasstype'],我会将它放在$glasstype中。现在我可以在我的函数“sd_向导\u glass_type”(作为会话变量)中随处使用$glasstype 但是

我正在一个项目中工作,其中一个将数据保存在会话变量中。这是一个Wordpress项目,我使用“sd\u向导\u glass\u类型”功能将其作为模板显示在我网站的页面上

如您所见:我首先在变量$glasstype中放入了$_SESSION['showerdoor']['glasstype']

然后,如果设置了$\u GET['glasstype'],我会将它放在$glasstype中。现在我可以在我的函数“sd_向导\u glass_type”(作为会话变量)中随处使用$glasstype

但是现在我想在下面的函数(在下面的wordpress页面中)中使用variabe$glasstype($_SESSION['淋浴门]['glasstype']),但这不起作用。但是如果我在页面上使用$_SESSION['showerdoor']['glasstype'],它确实可以工作

是否可以使用$glasstype作为会话变量

// Step: Glass type
function sd_wizard_glass_type() { 

    $glasstype = $_SESSION['showerdoor']['glasstype'];

    if(isset($_GET['glasstype'])) :
        $glasstype = $_GET['glasstype'];
    endif;
}
最近更新:

function sd_wizard_glass_type() { 

    if(isset($_GET['glasstype'])) :
        $_SESSION['showerdoor']['glasstype'] = $_GET['glasstype'];
    endif;

    $_SESSION['showerdoor']['glasstype'] = $glasstype;
}
现在我可以在我的函数“sd_向导\u glass_type”(作为会话变量)中随处使用$glasstype

不,这是一个局部变量。当你这样做的时候

$glasstype = $_SESSION['showerdoor']['glasstype'];
将会话变量的值复制到局部变量中

会话变量可以通过将它们放入
$\u会话
超全局设置:

$_SESSION['showerdoor']['glasstype'] = $glasstype;
使用指针:

$glasstype = &$_SESSION['showerdoor']['glasstype'];
但如果你尝试:

function toto()
{
    $glasstype = &$_SESSION['showerdoor']['glasstype'];
    $glasstype = 42;// Work
}
toto();
$glasstype = 42*42; // Fail because $glasstype is a local var
// If you want to do this, replace all $glasstype by $_SESSION['showerdoor']['glasstype'].

有几件事你可以试试。首先,如果需要变量在页面之间持久化,那么将其粘贴到会话中是一个好主意。如果您只需要在单个页面上使用它,那么您可以使用参数和返回值来移动它。比如说

function sd_wizard_glass_type() { 
    if(isset($_GET['glasstype'])) :
        $type = $_GET['glasstype'];
    else
        $type = $_SESSION['showerdoor']['glasstype'];
    return $type;
}

$glasstype = sd_wizard_glasstype();
现在glasstype设置在函数外部

如果需要将glasstype传递回函数

function newfunction($glasstype)
{
    //stuff
    //return something;
}
然后用同样的方式来称呼它

$foo = newfunction($glasstype);
您还可以使用关键字
global
将变量设置为全局变量,但这不会持续到给定页面之外


编辑:这里要知道的主要内容是php中的变量范围。如果在函数内声明变量,则不能在函数外使用它。如果在函数外部声明它,则不能在函数内部使用它,除非使用全局关键字或将其作为参数传递。

$\u会话
已经是全局的。是的,我知道,但由于某些原因,我不能使用$glasstype global,它是会话变量$\u SESSION['sparthdoor']['glasstype']您是否试图在函数范围之外使用
$glastype
?是的,我就是这样trying@Robbert然后把它写回会话中,正如我在回答中所示。谢谢你的回答。