【问题标题】:global variables from one function to another从一个函数到另一个函数的全局变量
【发布时间】:2011-11-15 15:10:23
【问题描述】:

假设我有这个:

function myFunc()
{
    global $distinct_variable;

    die ($distinct_variable);
}

function anotherFunc()
{
    $distinct_variable = 'Hello World';

    myFunc();
}

anotherFunc();

为了 anotherFunc() 正确显示“Hello World”,它必须这样写

{
    global $distinct_variable;

    $distinct_variable = 'Hello World';

    myFunc();
}

现在它会显示消息,但为什么我必须全局 $distinct_variable;在 anotherFunc() 中,因为它是 myFunc() 中的全局变量,在 anotherFunc() 中

是的,我知道函数内部的变量不会超出它们,但我认为它应该可以工作......

有人可以解释为什么它不起作用吗? 谢谢。

谢谢你的回答,我现在明白了:)

【问题讨论】:

  • 你做错了。这不是您应该如何构建代码的方式。从长远来看,它会给你留下无法维护的混乱和许多令人毛骨悚然的动作。请说明您要执行的操作,以便我们向您展示如何正确执行。
  • 本质上,你应该将外部函数的 var 传递给内部函数,否则它会被忽略。

标签: php function variables global


【解决方案1】:

global 变量就是这样 - 它仅存在于 GLOBAL 范围内。

PHP 中的所有内容(除了超全局变量)都只存在于一个范围内 - 无论是全局范围,还是函数/方法的范围。范围不会级联 - 所以仅仅因为您在“外部”函数中有一个变量并不能使其可用于“内部”函数。

同样,global 仅获取在 GLOBAL 范围(最顶层范围)中定义的变量,而不仅仅是“调用我的范围之上的范围”。这是您尝试做的,但绝对行不通。这种更细粒度的控制是函数参数/返回值的用途。

【讨论】:

    【解决方案2】:

    每个函数都有自己的符号表。还有一个全局符号表。仅仅因为从另一个函数中调用一个函数并不意味着在一个函数中声明为全局的变量在另一个函数中是全局的,或者从另一个函数继承。默认情况下,它们仍然引用“本地”符号表中的变量。

    【讨论】:

      【解决方案3】:

      执行global $somevar; echo $somevar 归结为echo $GLOBALS['somevar'];。 $GLOBALS 超全局变量不包括在函数内部定义的变量:只有真正的“全局”变量,它们存在于脚本的顶层。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-21
        • 2019-07-03
        • 1970-01-01
        • 1970-01-01
        • 2022-10-24
        • 2017-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多