【问题标题】:Why $GLOBAL is not working in function scope - PHP为什么 $GLOBAL 在函数范围内不起作用 - PHP
【发布时间】:2017-08-17 13:53:44
【问题描述】:

我已经写了两次相同的代码:在文件的根目录和函数中

$GLOBAL 超全局变量在函数中不起作用。但是同样的事情已经失效了

参考: 1.php_superglobals 2.reserved.variables.globals

代码:

<?php

// working here
$GLOBALS['x'] = "Root of the file";
echo $x;

// same things are not working in the function.
function checkglobal() { 
    $GLOBALS['z'] = "In the function.";
    echo $z;
} 
checkglobal();

输出:

文件的根目录

注意未定义变量:z 在第 10 行

Click and check here

【问题讨论】:

  • 你认为 GLOBAL 到底是什么意思……?
  • 您将能够在 global 范围内(函数外)使用它。 3v4l.org/5TYMJ
  • 是的,通过它你可以访问 global 范围内的变量。不在函数范围内。
  • 全球并不意味着“无处不在”,我才刚刚意识到这实际上很令人困惑。
  • echo $GLOBALS['z']; in function echo $z; 在函数中定义后在函数外。

标签: php function scope global-variables superglobals


【解决方案1】:

我在我的代码中发现了我的错误。 $GLOBALS 超全局变量用于创建全局变量并在非全局范围内访问它。 如果我们想在非全局范围内直接使用,需要用“global”关键字声明全局变量。

更正的代码:

<?php

// working here
$GLOBALS['x'] = "Root of the file";
echo $x;
 
// same things are not working in the function.
function checkglobal() { 
    $GLOBALS['z'] = "In the function.";
    global z; // declare global variable *******************
    echo $z;
} 
checkglobal();

输出:

文件的根目录

在函数中。

【讨论】:

    【解决方案2】:

    此脚本不会产生任何输出,因为 echo 语句引用了 $z 变量的本地版本,并且尚未在此范围内为其分配值。您可能会注意到,这与 C 语言有点不同,因为 C 中的全局变量自动可用于函数,除非被局部定义特别覆盖。这可能会导致一些问题,因为人们可能会无意中更改全局变量。在 PHP 中,如果要在函数中使用全局变量,则必须在函数中声明为全局变量。

    【讨论】:

    • 谢谢。您能否建议我,我的代码中缺少哪些内容?函数中的代码也如何工作?
    猜你喜欢
    • 2013-03-12
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    相关资源
    最近更新 更多