如何在PHP中声明一个全局variables?
我有这样的代码:
<? $a="localhost"; function body(){ global $a; echo $a; } function head(){ global $a; echo $a; } function footer(){ global $a; echo $a; } ?>
有什么办法可以在一个地方定义全局variables,并且可以一次性在所有函数中访问variables$a
吗? 不使用global $a;
更多?
$GLOBALS
数组可以用来代替:
$GLOBALS['a'] = 'localhost'; function body(){ echo $GLOBALS['a']; }
从手册 :
包含当前在脚本的全局范围中定义的所有variables的引用的关联数组。 variables名称是数组的键。
如果你有一组需要一些公共variables的函数,那么带有属性的类可能是一个不错的select,而不是全局的:
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);
如果variables不会改变,你可以使用define
例:
define('FOOTER_CONTENT', 'Hello I\'m an awesome footer!'); function footer() { echo FOOTER_CONTENT; }
在$ GLOBALS超级全局数组中添加你的variables
$GLOBALS['variable'] = 'localhost';
并在全球范围内使用
或者您可以使用可在整个脚本中访问的常量
define('HOSTNAME', 'localhost');
这个答案是非常晚的,但我所做的是设置一个类,将布尔值,数组和整数初始值保存为全局范围静态variables。 任何常量string都是这样定义的。
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
关键字必须存在于类中,否则variables$ a,$ b和$ c将不会被全局作用域。
你用你写这个问题的方式回答了这个问题 – 用'define'。 但一旦设置,你就不能改变一个定义。
或者,在类中有一些常量,比如class :: constant,你可以使用它。 你也可以通过向类声明静态属性来使它们变化,如果你想改变它的话,用函数设置静态属性。
如果这符合你的意图,你可以尝试在closuresfunction或Lambda的关键字use
…虽然PHP 7.0。 这不是更好,但只是一个select。
$foo = "New"; $closure = (function($bar) use ($foo) { echo "$foo $bar"; })("York");
演示 | 信息
在函数之外声明的variables具有GLOBAL SCOPE,只能在函数之外访问
<?php global $a; $a=10; echo $a; function xl($a){ echo "in the function".$a." <br/>"; } echo "in outside ".$a."<br/>"; xl($a); ?>
你不应该再使用全局variables,它们不能在PHP 5.4中使用。