PHP切换会话变量

时间:2014-01-02 02:47:36

标签: php

如何创建PHP切换?每次调用此函数时,我总能得到相同的结果。我认为问题在于在一开始就初始化变量,但你不能有一个非初始化的会话变量......

$_SESSION['trigger'] = 0;

function trig()
{
    if($_SESSION['trigger'] == 1)
        $_SESSION['trigger'] = 0;
    else if($_SESSION['trigger'] == 0)
        $_SESSION['trigger'] = 1;
    else
        $_SESSION['trigger'] = 'N/A';
                //echo the result of $_SESSION['trigger'] outside of the function.

}

3 个答案:

答案 0 :(得分:1)

您可以有条件地执行初始化:

if (!isset($_SESSION['trigger'])) {
    $_SESSION['trigger'] = 0;
}

或者在trig()函数中检测它的存在:

function trig()
{
    $old = isset($_SESSION['trigger']) ? (int)$_SESSION['trigger'] : 0;

    $_SESSION['trigger'] = 1 - $old;
}

答案 1 :(得分:0)

在脚本开头初始化变量时,您将覆盖任何先前的值,并始终从trig()获得相同的结果。

相反,首先检查是否存在'trigger'键;如果已设置,请运行检查。如果未设置,请将其初始化。这样的事情应该会有所帮助:

if (array_key_exists('trigger', $_SESSION)) {
    trig();
}
else {
    $_SESSION['trigger'] = 0;
}

另外,我假设你有比你在这里发布的脚本更多的脚本,但如果没有,请务必在尝试访问$ _SESSION超全局之前调用session_start()

答案 2 :(得分:0)

这样做:

...
$trigger = (isset($_SESSION['trigger'])) ? $_SESSION['trigger'] : 0;
...
function trig($trigger) 
{
     switch($trigger){
         case 1:
             $trigger = 0;
             break;
         case 0:
             $trigger = 1:
             break;
         default:
             $trigger = 'N/A';
             break;
     }
     $_SESSION['trigger'] = $trigger;
     return true;
}
...
trig($trigger);