可以在 php7 中的函数内使用全局变量吗?它在php5.4中正常工作。
我发现关键字全局在php7中不再有用了:
全局只接受简单变量migration70.incompatible
但是有关于GLOBALS的页面reserved.variables.globals 仍然写着(PHP 4,PHP 5,PHP 7)应该支持GLOBALS。
不幸的是,这些对我来说没有任何作用:
function printGlobal(){
global ${$a};
global $b;
echo '<br/>-'.${$a};
echo '<br/>-'.$b;
echo '<br/>-'.$GLOBALS['c'];
}
$a = "hello";
$b = 7;
$c = 6;
printGlobal();
输出:
-
-
-
请不要开始讨论避免使用全局变量:)
---编辑:
我错过了,我使用的X.php文件包含在函数includeAnotherPage(..)中的index.php文件中。因此,X.php文件中定义的变量不能是全局变量 - 因为整个X.php文件已经在函数中。因此,上面写的代码不起作用。
好的,谢谢你的回复。我很愚蠢,文章把我锁定在全局变量可以被停用的感觉中。
答案 0 :(得分:5)
PHP还为您提供了使用Super-Globals之一定义全局变量的选项:$GLOBALS
。所以你可以做下面的事情你也可以QUICK TEST Here:
<?php
$GLOBALS['a'] = "hello";
$GLOBALS['b'] = 7;
$GLOBALS['c'] = 6;
$GLOBALS['hello'] = "Howdy...";
function printGlobal(){
$a = $GLOBALS['a'];
$b = $GLOBALS['b'];
$c = $GLOBALS['c'];
$d = $GLOBALS[$a];
echo '<br/>-'.$d;
echo '<br/>-'.$b;
echo '<br/>-'.$c;
}
printGlobal();
答案 1 :(得分:1)
您的代码几乎不错,但您有语法问题。此代码与您的代码几乎相同,但它可以工作(使用PHP 7.0.12测试)。
<?php
function printGlobal() {
global $a;
global $b;
echo '<br />-'.$a; //Echoes $a
echo '<br />-'.$b; //Echoes $b
echo '<br />-'.$GLOBALS['c']; //Echoes $c from from the array $GLOBALS
}
$a = 1;
$b = 2;
$c = 3;
printGlobal();
正如您所看到的,在printGlobal
我只是指定我使用$ a和$ b作为全局,而在echo中,我使用$ a而不是$ {a},因为$ {a}可以在双引号字符串中使用,在这里你可以在任何引号之外。
请参阅$GLOBALS,其中说明无需使用global $variable
,因为$ GLOBALS随处可用。
输出:
<br/>-1<br/>-2<br />-3
请注意,您应该使用\ n在新行上书写。
编辑:请注意,在匿名函数中,use
键工作可用,因此您可以使用它来将变量置于函数范围内。
<?php
$message = "Hello world!";
$ex = function() use ($message) {
echo $message;
}
请参阅use keyword。