php7是否仍然支持全局变量?

时间:2016-12-18 17:06:35

标签: php global-variables

可以在 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文件已经在函数中。因此,上面写的代码不起作用。

好的,谢谢你的回复。我很愚蠢,文章把我锁定在全局变量可以被停用的感觉中。

2 个答案:

答案 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