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

问题描述 投票:1回答:2

我对这种情况有点困惑。

    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循环问题。所以在这种情况下,我相信它有点不同。

php function variables scope global-variables
2个回答
1
投票

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

错了,如果你的意思是{}作为一个块。

根据PHP Manual

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

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


0
投票

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

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

来自docs

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

© www.soinside.com 2019 - 2024. All rights reserved.