如何“定义”全局变量(保证唯一性)

时间:2014-02-06 22:27:35

标签: php global-variables

通过定义我的意思是使用define函数。 我想知道的是我可以缩短它:

$GLOBALS['MY_VAR']MY_VAR ...并在任何范围内使用它! (不必在函数中使用global $myvar;。)

修改: 示例:print_r(MY_VAR['somekey']);出错!

修改: 我理解它是一个常量变量,但它不是一个指向数组的常量指针吗?我以为数组在php中是可变的吗?

3 个答案:

答案 0 :(得分:0)

试试这个:

define("CONSTANT","anything");

您可以在任何范围内的任何地方使用CONSTANT

示例:

define("CONSTANT","123abc321");
function test(){
   return CONSTANT;
}
echo test(); //echoes 123abc321

但是

请注意,您无法将数组分配给常量值。

答案 1 :(得分:0)

定义是指常量,而不是全局。常量可以在任何地方使用。以下是您使用示例的方法。

define( 'MY_VAR', $GLOBALS['MY_VAR'] );

此处有更多信息:http://uk1.php.net/define

答案 2 :(得分:0)

嗯,它总是不变吗?我想更好的方法是建立自己的令牌。如果您这样做,您可以从任何地方访问您的令牌并编辑,阅读或更改此令牌中的值。

根据您的需要,构建一个令牌类(将其复制并粘贴到名为MyTokenHolder.php 的文件中):

class MyTokenHolder
{
    protected static $_sessionkey = "BE SURE TO OVERRIDE THIS KEY";

    //Define your values here
    public $Username;
    public $UserID;

    public function __construct()
    {
        if(isset($_SESSION[self::$_sessionkey]))
        {
            $token = unserialize(base64_decode($_SESSION[self::$_sessionkey]));
            //see above public params
            $this->Username     = $token->Username;
            $this->UserID       = (int)$token->UserID;
        }
    }

    public function SaveToSession()
    {
        $_SESSION[self::$_sessionkey] = base64_encode(serialize($this));
    }

    public static function DestroySession()
    {
        unset($_SESSION[self::$_sessionkey]);
    }
}

现在,您可以设置在令牌中定义的值:

//Set Values
$token = new MyTokenHolder();
$token->Username = 'test';
$token->UserID = 99;
$token->SaveToSession();

您还可以从令牌中读取您的值。

//Read Values 
$token = new MyTokenHolder();
echo $token->UserID;
echo $token->Username;

在这里测试你的自我 - SQL小提琴:http://ideone.com/jj7r6l