当在块内声明变量时,如何引用代码块之外的变量?

时间:2014-06-23 07:05:22

标签: php function variables scope global-variables

我对这种情况感到有些困惑。

    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
    {
        $un = $row['USERNAME'];
        $pw = $row['PASSWRD'];
        $at = $row['ACCOUNT_TYPE'];
        $GLOBALS['fn'] = $row['FNAME'];
    }

所以这段代码在函数内部。变量$un$pw$at都已声明,并在此代码块中给出了值。

现在我的理解是,在block代码中声明的变量只能在该块中使用。

正如您所看到的,我还有一个$GLOBALS['fn']变量设置,我在另一个文件中使用它,这样我就可以将其设置为全局。

现在我的问题是:

如何在块内声明代码块之外的变量?

根据这篇文章PHP Variable scope,在函数外部声明的变量与函数内部的变量不同,即使它们共享相同的名称。为此,我需要在块中添加global$GLOBALS数组的变量。

重复注意事项 - 在我没有真正怀疑之前可能已经问过这个问题,因为它很简单。我只是用自己的话来说明我的情况。帮助我更好地理解它。 此链接的问题也解释了我在链接文章中读到的内容。但它确实没有解决我所指的while循环问题。所以在这种情况下,我相信它有点不同。

2 个答案:

答案 0 :(得分:1)

  

现在我的理解是,在一个代码块中声明的变量只能在该块中使用

错误,如果您将{}表示为块。

根据PHP Manual

  

函数内使用的任何变量默认都限制在本地函数范围内。

函数中没有提到{}级别范围。函数内声明的任何变量在整个函数中都可用,即使它在任何子大括号内声明也是如此。这就是为什么它仍然可用。您可以在循环之外访问$un之类的变量,只需它们将包含上次迭代的值。

答案 1 :(得分:0)

也许this回答可能会有所启发。

如果我理解正确,你回答了自己的问题。通过在函数中声明$ GLOBALS数组上的变量,可以在整个脚本中访问该变量。

来自docs

  

$ GLOBALS数组是一个关联数组,全局变量的名称是键,该变量的内容是数组元素的值。注意$ GLOBALS在任何范围内是如何存在的,这是因为$ GLOBALS是一个超全局

相关问题