让我说我有这个:
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()
中是的,我知道函数内部的变量不会超出它们的范围,但我认为它应该有效...
有人可以解释为什么它不起作用? 感谢。
感谢您的回答,我现在就明白了:)
答案 0 :(得分:3)
global
变量就是这样 - 它只存在于GLOBAL范围内。
PHP中的所有内容(超级全局除外)只存在于一个范围内 - 可以是全局范围,也可以是函数/方法的范围。范围不会级联 - 因为你在“外部”函数中有一个变量并不能使它可用于“内部”函数。
类似地,global
仅获取GLOBAL范围中定义的变量(最顶层的范围),而不仅仅是“此范围之上的范围,我被称为”。这是你试图做的,但绝对不行。这种更精细的控制级别是函数参数/返回值的用途。
答案 1 :(得分:2)
每个函数都有自己的符号表。还有一个全局符号表。仅仅因为从另一个函数中调用一个函数并不意味着在一个函数中声明为全局的变量在另一个函数中是全局的,或者从另一个函数继承。默认情况下,它们仍然引用“本地”符号表中的变量。
答案 2 :(得分:1)
执行global $somevar; echo $somevar
归结为echo $GLOBALS['somevar'];
。 $ GLOBALS超全局不包含在函数内定义的变量:只存在于脚本顶层的真正“全局”变量。