php新手问题:web的全局变量

时间:2011-03-28 16:41:57

标签: php global-variables

我想设置一些全局变量来存储几件事。 我试过这样的话:

function init_web()
{
    $webname = "myweb";
    $web['webname'] = $webname;
    $web['server_root'] = $_SERVER['DOCUMENT_ROOT']."/$webname/"; 
    $web['lang']="en";
}

问题是我无法访问函数内部的那些变量。 我尝试使用global $web;但没有帮助。

让它全球化的诀窍是什么?

感谢

6 个答案:

答案 0 :(得分:5)

虽然你会得到通常的“全局变量不好”的哭声,但这是基础:

$web = array(); // define the var at the "top level" of the code tree, outside any functions/classes.
function init_web() {
    global $web; // make it visible in the function
    $web['lang'] = 'en'; // make some settings
}

基本上,你有它,但没有在函数外定义变量。只是在函数中说“全局”不会在函数外部神奇地创建一个函数 - 在尝试将其“内化”到函数并更改/访问其内容之前,它必须存在。

答案 1 :(得分:2)

你走在正确的轨道上:

$web = array();

function init_web()
{
    global $web;
    $webname = "myweb";
    $web['webname'] = $webname;
    $web['server_root'] = $_SERVER['DOCUMENT_ROOT']."/$webname/"; 
    $web['lang']="en";
}

答案 2 :(得分:1)

您可以将它们定义为常量

define('WEBNAME',"myweb");

并且可以在您的应用程序中随处使用,因为默认情况下常量本身就是全局的。

这是将常量存储为常量的方法,因为它们从未动态更改,直到您移动到新服务器或更改配置。

答案 3 :(得分:1)

您可以使用会话变量:

session_start(); // at the top of the php page
function init_web()
{
    $webname = "myweb";
    $_SESSION['webname'] = $webname;
    $_SESSION['server_root'] = $_SERVER['DOCUMENT_ROOT']."/$webname/"; 
    $_SESSION['lang']="en";
}

现在他们可以'全球'访问: - )

答案 4 :(得分:0)

在函数外部声明$web并使用$GLOBALS超全局引用它:

// Declare in global scope
$web = array();

function init_web()
{
  $webname = "myweb";
  // Access via superglobal in function scope
  $GLOBALS['web']['webname'] = $webname;
  $GLOBALS['web']['server_root'] = $_SERVER['DOCUMENT_ROOT']."/$webname/"; 
  $GLOBALS['web']['lang']="en";
}

答案 5 :(得分:0)

如果您只是存储标量值(字符串,整数,浮点数 - 而不是数组,对象),则应使用define()

这将使您的配置全局且不变。

至于回答你的问题,

首先在该函数范围之外定义变量(可能在配置文件中),然后使用global关键字在需要时将其设置为全局变量。