PHP在其他函数中访问函数中的全局变量

时间:2017-06-16 19:26:23

标签: php global-variables

我的文件 a.php 看起来像

function func_1() {
  inlude_once(b.php);
  $somevar = 'def';
  func_2($somevar);
}

b.php 看起来像

$some_global_var = 'abc';

function func_2($var) {
  global $some_global_var;
  echo $some_global_var.$var;
}

由于某种原因,我只得到 def ,为什么func_2看不到$ some_global_var?

2 个答案:

答案 0 :(得分:2)

因为您忘记了func_1的范围。因此,当您包含您的定义时,这就是您的代码在PHP中的显示方式

function func_1() {
   $some_global_var = 'abc'; // <- this is inside the scope of the parent function!

    function func_2($var) {
      global $some_global_var;
      echo $some_global_var.$var;
    }
  $somevar = 'def';
  func_2($somevar);
}

您正在 func_1内进行。因此,变量在全球范围内从未真正可用。如果您在外部定义$some_global_var = 'abc';,那么它就在全局范围内。

你应该做的是将此作为参数注入。全局是一种不好的做法

function func_1() {
   $some_global_var = 'abc'; 

    function func_2($var, $var2) {
      echo $var2 . $var;
    }
  $somevar = 'def';
  func_2($somevar, $some_global_var);
}

答案 1 :(得分:0)

global放在它前面。

根据PHP文档

  

在函数外部使用全局关键字不是错误。如果文件包含在函数内部,则可以使用它。

您可能遇到包含文件妨碍的问题