我的代码是这样的:
<?
$a="localhost";
function body(){
global $a;
echo $a;
}
function head(){
global $a;
echo $a;
}
function footer(){
global $a;
echo $a;
}
?>
有没有办法在一个地方定义全局变量,并且可以同时在所有函数中访问变量$a
?没有使用global $a;
更多?
答案 0 :(得分:240)
可以使用$GLOBALS
数组:
$GLOBALS['a'] = 'localhost';
function body(){
echo $GLOBALS['a'];
}
来自Manual:
一个关联数组,包含对当前在脚本全局范围内定义的所有变量的引用。变量名是数组的键。
如果你有一组需要一些公共变量的函数,那么一个具有属性的类可能是一个不错的选择而不是全局:
class MyTest
{
protected $a;
public function __construct($a)
{
$this->a = $a;
}
public function head()
{
echo $this->a;
}
public function footer()
{
echo $this->a;
}
}
$a = 'localhost';
$obj = new MyTest($a);
答案 1 :(得分:73)
如果变量不会改变,您可以使用define
示例:
define('FOOTER_CONTENT', 'Hello I\'m an awesome footer!');
function footer()
{
echo FOOTER_CONTENT;
}
答案 2 :(得分:28)
在$ GLOBALS超全局数组中添加变量,如
$GLOBALS['variable'] = 'localhost';
并全球使用
或者您可以使用可在整个脚本中访问的常量
define('HOSTNAME', 'localhost');
答案 3 :(得分:14)
如果变量在函数之外声明,则它已在全局范围内。所以没有必要申报。但是,从调用此变量的位置,必须有权访问此变量。如果您在函数内部进行调用,则必须使用global
关键字:
$variable = 5;
function name()
{
global $variable;
$value = $variable + 5;
return $value;
}
在函数外部使用全局关键字不是错误。如果要在函数中包含此文件,可以将变量声明为global
。
config.php
global $variable;
$variable = 5;
other.php
function name()
{
require_once __DIR__ . '/config.php';
}
您也可以使用$GLOBALS
。它是一个超级全球,因此它可以随处访问。
$GLOBALS['variable'] = 5;
function name()
{
echo $GLOBALS['variable'];
}
根据您的选择,您可以选择。
答案 4 :(得分:5)
这个答案很晚,但我所做的是设置一个类,它将布尔值,数组和整数初始值保存为全局范围静态变量。任何常量字符串都是这样定义的。
define("myconstant", "value");
class globalVars {
static $a = false;
static $b = 0;
static $c = array('first' => 2, 'second' => 5);
}
function test($num) {
if (!globalVars::$a) {
$returnVal = 'The ' . myconstant . ' of ' . $num . ' plus ' . globalVars::$b . ' plus ' . globalVars::$c['second'] . ' is ' . ($num + globalVars::$b + globalVars::$c['second']) . '.';
globalVars::$a = true;
} else {
$returnVal = 'I forgot';
}
return $returnVal;
}
echo test(9); ---> The value of 9 + 0 + 5 is 14.
echo "<br>";
echo globalVars::$a; ----> 1
static
个关键字必须出现在类中,否则vars $ a,$ b和$ c将不会全局范围。
答案 5 :(得分:4)
您以编写问题的方式回答了这个问题 - 使用'define'。但是一旦设置,就无法更改定义。
或者,在类中有一个带常量的技巧,比如你可以使用的class :: constant。您还可以通过向类声明静态属性来使它们变量,如果要更改静态属性,则可以设置静态属性。
答案 6 :(得分:4)
如果符合您的意图,您可以在关闭函数或 Lambdas 中尝试关键字use
...但PHP 7.0。不是那更好,而是另一种选择。
$foo = "New";
$closure = (function($bar) use ($foo) {
echo "$foo $bar";
})("York");
答案 7 :(得分:1)
让我们想一想:
class globe{
static $foo = "bar";
}
您可以随意使用和修改它,例如:
function func(){
echo globe::$var;
}
答案 8 :(得分:0)
如果你使用过程函数而不是变量怎么办,并在任何地方调用它们。
我通常会创建一个配置值集合,并将它们放在一个带有return语句的函数中。我只需要包含我需要利用全局值并调用特定函数的地方。
root
|-- a_id: long (nullable = true)
|-- td_cnt: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- m_cd: string (nullable = true)
| | |-- td_cnt_sum: double (nullable = true)
|-- td_cnt_sum: double (nullable = true)
答案 9 :(得分:-2)
$GLOBALS[]
是正确的解决方案,但是由于我们正在讨论替代方案,因此函数也可以轻松地完成此工作:
function capital() {
return my_var() . ' is the capital of Italy';
}
function my_var() {
return 'Rome';
}
答案 10 :(得分:-17)
你不应该再使用全局变量了,它们在PHP 5.4中不可用。