PHP范围和全局

时间:2013-11-15 11:09:05

标签: php scope global

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

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

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:2)

错字。

global $var;应为global $vars;

答案 1 :(得分:2)

Globals非常混乱,很难调试,将其作为函数的参数传递。

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

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

my_func($array);

答案 2 :(得分:1)

实际做错了什么 - 正在使用全局变量。永远不要这样做,因为全局变量是副作用。他们生产的案例可能非常难以调试。想象一下,你有第143个包含文件的功能,在2056行的某个地方偶尔会改变你的变量,这也会导致所有逻辑的破坏。

所以,实际上,将变量作为参数传递

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

至于你的代码 - 首先使用空格。真的 - 对于翻译和编译器而言,它们并不重要,但对于那些阅读该代码的人来说,看到清晰的图像非常重要。

您的错误是您尝试访问全局变量,这是您的循环迭代器,这没有任何意义,因为您的全局变量是数组,而不是临时循环迭代器。 / p>

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