如何"define"全局变量(保证唯一性)



由定义我是指使用define函数。我想知道的是我可以缩短以下内容:

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

编辑:示例:print_r(MY_VAR['somekey']);给出错误!

编辑:我知道它是一个恒定的变量,但这不是一个不断的指向数组的指针吗?我以为数组在PHP中是可变的?

定义是指常数而不是全局。常数可以在任何地方使用。以下是您给出的示例的方式。

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

更多信息在这里:http://uk1.php.net/define

hm,它总是一个常数吗?我想更好的方法是您建立自己的令牌。如果这样做,则可以从令牌的任何地方访问并编辑,读取或更改此令牌中的值。

为您需要,构建一个令牌类(只是复制并将其粘贴到名为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();

,您也可以从token读取您的值。

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

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

尝试以下:

define("CONSTANT","anything");

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

示例:

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

但是

请注意,您不能将数组分配给常数值。

最新更新