为什么$ GLOBAL不能在函数范围内工作 - PHP

时间:2017-08-17 13:53:45

标签: php function scope global-variables superglobals

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

$ GLOBAL超全局变量在该函数中不起作用。但同样的事情已经完成了功能

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

代码:

df <- data.frame(id1=c("a", "a", "a", "j", "x", "x"), 
                 id2=c("b", "c", "d", "k", "y", "z"))

输出:

  

文件的根

     

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

Click and check here

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我在代码中发现了自己的错误。 $ 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();

<强>输出:

  

文件的根

     

在函数中。