如何在php中声明一个全局变量?

时间:2012-11-23 13:51:45

标签: php global-variables global

我的代码是这样的:

<?
    $a="localhost";
    function body(){
        global $a;
        echo $a;
    }

    function head(){
        global $a;
        echo $a;
    }

    function footer(){
        global $a;
        echo $a;
    }
?>

有没有办法在一个地方定义全局变量,并且可以同时在所有函数中访问变量$a?没有使用global $a;更多?

11 个答案:

答案 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");

demo | info

答案 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中不可用。