0

我对 PHP 中变量的范围有点困惑。我已经阅读了 PHP 手册中关于范围、全局和全局的部分,但这在我正在构建的应用程序中似乎并不成立。在页面的开头,我正在设置一个像这样的变量

$vars = array( 'id' => '2', 'name' => 'john' );

然后后来我想在一个函数中使用它,所以我去:

function my_func() { global $var; foreach ($vars as $var) { echo $var; } }

但这不会起作用,除非我global $vars在第一次设置变量时也放了一个 - 我真的需要在两个地方都使用这个全局变量吗?或者我做错了什么?

谢谢!

4

3 回答 3

2

错字。

global $var;应该global $vars;

于 2013-11-15T11:11:02.033 回答
2

全局变量是 imo 并且难以调试,将其作为参数传递给您的函数。

$array = array( 'id' => '2', 'name' => 'john' );

function my_func($vars) {
    foreach ($vars as $var) { 
        echo $var; 
    } 
}

my_func($array);
于 2013-11-15T11:16:14.807 回答
1

实际上做错了什么 - 是使用全局变量。永远不要这样做,因为全局变量是副作用。它们产生的案例可能非常难以调试。想象一下,您在第 143 行包含的文件中有函数,该函数在第 2056 行的某处偶尔更改了您的变量,这也会导致您的所有逻辑中断。

所以,真的,将变量作为参数传递

function my_func($vars) 
{
   foreach ($vars as $var) 
   {
      echo $var; 
   } 
}

至于您的代码 - 首先,使用空格。真的 - 对于解释器和编译器来说,它们并不重要,但对于将阅读该代码的人来说,看到清晰的画面非常重要。

你的错误是你试图访问全局变量,这是你的循环迭代器,这是没有意义的,因为你的全局变量是你的数组,而不是临时循环迭代器。

我希望我的快速代码审查对您有所帮助。

于 2013-11-15T11:16:05.553 回答