[英]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 将不会在全局范围内。
您以编写问题的方式回答了这个问题-使用“定义”。 但是一旦设置,您就无法更改定义。
或者,您可以使用类中的常量技巧,例如 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.