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

我有这样的代码:

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


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


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

有没有办法在一个地方定义全局变量,并使ABC_0_变量在所有函数中同时可访问?在不使用_的情况下,ABC_1更多?

485192 次浏览

你用你写问题的方式回答了这个问题——用“定义”。但是一旦设置,就不能更改定义。

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

如果变量不会改变,您可以使用define

示例:

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


function footer()
{
echo FOOTER_CONTENT;
}

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

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

并在全球范围内将其用作

echo $GLOBALS['variable']

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

define('HOSTNAME', 'localhost');

“定义”的用法(注意-不包括美元)

echo HOSTNAME;

可以使用$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("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将不会成为全局作用域。

您可以在关闭函数中尝试使用关键字use,或者如果符合您的意图,也可以尝试使用兰姆达斯。PHP 7.0虽然。这并不是说它更好,而只是一种选择。

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

演示| 信息

如果你使用过程函数而不是变量,并在任何地方调用它们。

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

function host()
{
return "localhost";
}

如果一个变量是在函数之外声明的,那么它已经在全局范围内了。所以不需要申报。但是你调用这个变量的地方必须有访问这个变量的权限。如果从函数内部调用,则必须使用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'];
}

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

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

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

您可以使用和修改它,_您喜欢的ABC_0,如:

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

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

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


function my_var() {
return 'Rome';
}