我想设置一些全局变量来存储几件事。 我试过这样的话:
function init_web()
{
$webname = "myweb";
$web['webname'] = $webname;
$web['server_root'] = $_SERVER['DOCUMENT_ROOT']."/$webname/";
$web['lang']="en";
}
问题是我无法访问函数内部的那些变量。
我尝试使用global $web;
但没有帮助。
让它全球化的诀窍是什么?
感谢
答案 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
关键字在需要时将其设置为全局变量。