如何在 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关键字必须存在于类中,否则 vars $a、$b 和 $c 将不会全局限定。

您可以在闭包函数或 Lambda 中尝试关键字 use,如果这符合您的意图......不过是 PHP 7.0。不是它更好,而只是一种选择。

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

演示 |info

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

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

您可以在您喜欢的每个位置使用和修改它,例如:

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

你用你写问题的方式回答了这个问题——使用"定义"。 但是一旦设置,您将无法更改定义。

或者,在

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

如果您使用过程函数而不是变量并随便调用它们怎么办?

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

function host()
{
   return "localhost";
}

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

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

相关内容

  • 没有找到相关文章

最新更新