我有这样的代码:
<? $a="localhost"; function body(){ global $a; echo $a; } function head(){ global $a; echo $a; } function footer(){ global $a; echo $a; } ?>
有没有办法在一个地方定义全局变量,并使ABC_0_变量在所有函数中同时可访问?在不使用_的情况下,ABC_1更多?
你用你写问题的方式回答了这个问题——用“定义”。但是一旦设置,就不能更改定义。
或者,您可以使用类中的常量的一些技巧,例如Class:Constant.您还可以通过向类声明静态属性来使它们可变,如果您想更改静态属性,可以使用函数来设置它。
如果变量不会改变,您可以使用define
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
$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将不会成为全局作用域。
static
您可以在关闭函数中尝试使用关键字use,或者如果符合您的意图,也可以尝试使用兰姆达斯。PHP 7.0虽然。这并不是说它更好,而只是一种选择。
use
$foo = "New"; $closure = (function($bar) use ($foo) { echo "$foo $bar"; })("York");
演示| 信息
如果你使用过程函数而不是变量,并在任何地方调用它们。
我通常收集配置值,并将它们放在带有返回语句的函数中。我只是在需要使用全局值和调用特定函数的地方包含了它。
function host() { return "localhost"; }
如果一个变量是在函数之外声明的,那么它已经在全局范围内了。所以不需要申报。但是你调用这个变量的地方必须有访问这个变量的权限。如果从函数内部调用,则必须使用global关键字:
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[]是正确的解决方案,但由于我们讨论的是替代方案,函数也可以轻松完成这项工作:
$GLOBALS[]
function capital() { return my_var() . ' is the capital of Italy'; } function my_var() { return 'Rome'; }