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

问题描述 投票:161回答:10

我有类似这样的代码:

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

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

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

有没有一种方法可以在一处定义全局变量并使变量$a一次在所有函数中均可访问?不使用global $a;更多?

php global-variables global
10个回答
253
投票

$GLOBALS数组可代替使用:

$GLOBALS

$GLOBALS['a'] = 'localhost'; function body(){ echo $GLOBALS['a']; }

一个关联数组,包含对当前在脚本的全局范围内定义的所有变量的引用。变量名是数组的键。


如果您有一组需要一些公共变量的函数,则带有属性的类可能是一个不错的选择,而不是全局的:

Manual

-18
投票

您不应该再使用全局变量,因为它们在PHP 5.4中不可用。


77
投票

如果变量不打算更改,则可以使用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);

示例:

define

29
投票

在$ GLOBALS超级全局数组中添加变量,如

define

并在全球范围内使用

或者您可以使用在整个脚本中都可以访问的常量

define('FOOTER_CONTENT', 'Hello I\'m an awesome footer!');

function footer()
{
    echo FOOTER_CONTENT;
}

22
投票

如果变量在函数外部声明,则其已在全局范围内。因此,无需声明。但是从那里调用此变量必须有权访问此变量。如果要从函数内部调用,则必须使用$GLOBALS['variable'] = 'localhost'; 关键字:

define('HOSTNAME', 'localhost');  

在函数外使用全局关键字不是错误。如果要将此文件包含在函数中,则可以将变量声明为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';
}

根据您的选择,您可以选择。


9
投票

这个答案很晚,但是我要做的是设置一个类,该类将布尔值,数组和整数初始值保存为全局范围静态变量。任何常量字符串都是这样定义的。

$GLOBALS

$GLOBALS['variable'] = 5; function name() { echo $GLOBALS['variable']; } 关键字必须存在于类中,否则变量$ a,$ b和$ c不会在全局范围内。


5
投票

[您以写问题的方式回答了这个问题-请使用'define'。但是一旦设置,就无法更改定义。

或者,可以在类中使用带有常量的技巧,例如class :: constant。您也可以通过向类声明静态属性来使它们可变,如果要更改静态属性,可以使用这些函数来设置静态属性。


5
投票

您可以在Closure函数中尝试使用关键字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 或在符合您的意图的情况下使用Lambdas ...不过是PHP 7.0。这不是更好,而是另一种选择。

static

use |$foo = "New"; $closure = (function($bar) use ($foo) { echo "$foo $bar"; })("York");


1
投票

让我们想些不同:

demo

而且您可以随意使用和修改它,例如:

info

0
投票

如果您使用过程函数而不是变量,并在任意位置调用它们,该怎么办。

我通常收集配置值,然后将它们放入带有return语句的函数中。我只是在需要利用全局值并调用特定函数的地方添加了该代码。

class globe{
    static $foo = "bar";
}
© www.soinside.com 2019 - 2024. All rights reserved.