繁体   English   中英

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

[英]How to declare a global variable in php?

我有这样的代码:

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

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

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

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

可以改用$GLOBALS数组:

$GLOBALS['a'] = 'localhost';

function body(){

    echo $GLOBALS['a'];
}

手册

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


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

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

例子:

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

function footer()
{
    echo FOOTER_CONTENT;
}

如果变量在函数之外声明,则它已经在全局范围内。 所以没有必要声明。 但是从你调用这个变量的地方必须可以访问这个变量。 如果您从函数内部调用,则必须使用global关键字:

$variable = 5;

function name()
{
    global $variable;
    
    $value = $variable + 5;
    
    return $value;  
 
}

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

根据您的选择,您可以选择其中任何一个。

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

$GLOBALS['variable'] = 'localhost'; 

并在全球范围内使用它

echo $GLOBALS['variable']

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

define('HOSTNAME', 'localhost');  

定义的用法(注意 - 没有美元)

echo HOSTNAME;

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

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关键字必须存在于类中,否则变量 $a、$b 和 $c 将不会在全局范围内。

如果这符合您的意图,您可以尝试在Closure函数或Lambdasuse关键字……不过 PHP 7.0。 并不是这样更好,而只是一种选择。

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

演示| 信息

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

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

您可以将全局变量声明为静态属性:

class global {
    static $foo = "bar";
}

你可以在任何你喜欢的地方使用和修改它,比如:

function echoFoo() {
    echo global::$foo;
}

如果您使用过程函数而不是变量并在任何地方调用它们会怎样。

我通常会收集配置值并将它们放在带有 return 语句的函数中。 我只是在需要使用全局值并调用特定函数的地方包含了它。

function host()
{
   return "localhost";
}

$GLOBALS[]正确的解决方案,但由于我们正在讨论替代方案,因此函数也可以轻松完成这项工作:

function capital() {
    return my_var() . ' is the capital of Italy';
}

function my_var() {
    return 'Rome';
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM