php中的全局引用

php中的全局引用,php,variables,reference,global,Php,Variables,Reference,Global,我在php.net上读到这篇文章: “当您将变量声明为global$var时,实际上是在创建对全局变量的引用。这意味着,这与: <?php $var =& $GLOBALS["var"]; ?> 我希望输出为“蓝色”,因为它表明取消设置$var不会取消设置全局变量。错误在哪里 如果我取消设置($var),我应该如何检查全局变量是否未取消设置?您需要了解您遗漏了较小的细节,&。这意味着您需要的是全局变量,而不是变量的副本 function test() { $var

我在php.net上读到这篇文章:

“当您将变量声明为
global$var
时,实际上是在创建对全局变量的引用。这意味着,这与:

<?php
$var =& $GLOBALS["var"];
?>
我希望输出为“蓝色”,因为它表明取消设置
$var
不会取消设置全局变量。错误在哪里


如果我取消设置($var),我应该如何检查全局变量是否未取消设置?

您需要了解您遗漏了较小的细节,
&
。这意味着您需要的是全局变量,而不是变量的副本

function test() {
    $var = $GLOBALS['x'];
    $var2 = &$GLOBALS['x'];
    echo $GLOBALS['x'] . "\n";
    $var2 = 'red';
    echo $var . "\n" . $GLOBALS['x'];

}

$x = 'blue';
test();
这个输出

blue
red

你会注意到,
$var
被分配到了全局版本,但是发生的事情是PHP只复制了
$x
。对于
$var2
,我们告诉PHP我们想要引用,或者,换句话说,
$x
的实际地址。这造成了巨大的差异,因为
$var
只是一个副本。更改它只会改变e copy。请注意,在我的示例中,我更改了
$x
的值,但只有
$var2
反映了这一更改。
$var
仍然保留了
$x
开始时的值。

您需要理解,您遗漏了
&
这一小细节。这意味着,您想要的是变量,而不是变量的副本

function test() {
    $var = $GLOBALS['x'];
    $var2 = &$GLOBALS['x'];
    echo $GLOBALS['x'] . "\n";
    $var2 = 'red';
    echo $var . "\n" . $GLOBALS['x'];

}

$x = 'blue';
test();
$var='red';
这个输出

blue
red

你会注意到,
$var
被分配到了全局版本,但是发生的事情是PHP只复制了
$x
。对于
$var2
,我们告诉PHP我们想要引用,或者,换句话说,
$x
的实际地址。这造成了巨大的差异,因为
$var
只是一个副本。更改它只会改变e copy。请注意,在我的示例中,我更改了
$x
的值,但只有
$var2
反映了这一更改。
$var
仍然保留了
$x
开始时的值。

您需要理解,您遗漏了
&
这一小细节。这意味着,您想要的是变量,而不是变量的副本

function test() {
    $var = $GLOBALS['x'];
    $var2 = &$GLOBALS['x'];
    echo $GLOBALS['x'] . "\n";
    $var2 = 'red';
    echo $var . "\n" . $GLOBALS['x'];

}

$x = 'blue';
test();
$var='red';
这个输出

blue
red

你会注意到,
$var
被分配到了全局版本,但是发生的事情是PHP只复制了
$x
。对于
$var2
,我们告诉PHP我们想要引用,或者,换句话说,
$x
的实际地址。这造成了巨大的差异,因为
$var
只是一个副本。更改它只会改变e copy。请注意,在我的示例中,我更改了
$x
的值,但只有
$var2
反映了这一更改。
$var
仍然保留了
$x
开始时的值。

您需要理解,您遗漏了
&
这一小细节。这意味着,您想要的是变量,而不是变量的副本

function test() {
    $var = $GLOBALS['x'];
    $var2 = &$GLOBALS['x'];
    echo $GLOBALS['x'] . "\n";
    $var2 = 'red';
    echo $var . "\n" . $GLOBALS['x'];

}

$x = 'blue';
test();
$var='red';
这个输出

blue
red
你会注意到,
$var
被分配到了全局版本,但是发生的事情是PHP只复制了
$x
。对于
$var2
,我们告诉PHP我们想要引用,或者,换句话说,
$x
的实际地址。这造成了巨大的差异,因为
$var
只是一个副本。更改它只会改变e copy。请注意,在我的示例中,我更改了
$x
的值,但只有
$var2
反映了该更改。
$var
仍然具有
$x
开始时的值

$var='red';
这不是不稳定,这是分配。分配影响全局变量

function test() {
    $var = $GLOBALS['x'];
    $var2 = &$GLOBALS['x'];
    echo $GLOBALS['x'] . "\n";
    $var2 = 'red';
    echo $var . "\n" . $GLOBALS['x'];

}

$x = 'blue';
test();
这也意味着取消设置$var不会取消设置全局变量

function test() {
    $var = $GLOBALS['x'];
    $var2 = &$GLOBALS['x'];
    echo $GLOBALS['x'] . "\n";
    $var2 = 'red';
    echo $var . "\n" . $GLOBALS['x'];

}

$x = 'blue';
test();
它是关于使用
unset
函数。
unset($var)
从当前范围中删除变量,但全局变量仍然存在

这不是不稳定,这是分配。分配影响全局变量

function test() {
    $var = $GLOBALS['x'];
    $var2 = &$GLOBALS['x'];
    echo $GLOBALS['x'] . "\n";
    $var2 = 'red';
    echo $var . "\n" . $GLOBALS['x'];

}

$x = 'blue';
test();
这也意味着取消设置$var不会取消设置全局变量

function test() {
    $var = $GLOBALS['x'];
    $var2 = &$GLOBALS['x'];
    echo $GLOBALS['x'] . "\n";
    $var2 = 'red';
    echo $var . "\n" . $GLOBALS['x'];

}

$x = 'blue';
test();
它是关于使用
unset
函数。
unset($var)
从当前范围中删除变量,但全局变量仍然存在

这不是不稳定,这是分配。分配影响全局变量

function test() {
    $var = $GLOBALS['x'];
    $var2 = &$GLOBALS['x'];
    echo $GLOBALS['x'] . "\n";
    $var2 = 'red';
    echo $var . "\n" . $GLOBALS['x'];

}

$x = 'blue';
test();
这也意味着取消设置$var不会取消设置全局变量

function test() {
    $var = $GLOBALS['x'];
    $var2 = &$GLOBALS['x'];
    echo $GLOBALS['x'] . "\n";
    $var2 = 'red';
    echo $var . "\n" . $GLOBALS['x'];

}

$x = 'blue';
test();
它是关于使用
unset
函数。
unset($var)
从当前范围中删除变量,但全局变量仍然存在

这不是不稳定,这是分配。分配影响全局变量

function test() {
    $var = $GLOBALS['x'];
    $var2 = &$GLOBALS['x'];
    echo $GLOBALS['x'] . "\n";
    $var2 = 'red';
    echo $var . "\n" . $GLOBALS['x'];

}

$x = 'blue';
test();
这也意味着取消设置$var不会取消设置全局变量

function test() {
    $var = $GLOBALS['x'];
    $var2 = &$GLOBALS['x'];
    echo $GLOBALS['x'] . "\n";
    $var2 = 'red';
    echo $var . "\n" . $GLOBALS['x'];

}

$x = 'blue';
test();

它是关于使用
unset
函数。
unset($var)
从当前作用域中删除变量,但全局变量仍然存在。

当您将
$var
声明为全局变量时,任何局部更改都会全局反映,甚至从函数内部反映出来。您能否给出整段代码以及对实际输出的注释?当前输出与预期结果有何不同ion?是的。答案是:您正在将“red”写入$var,因为这是对$GLOBALS的引用(由“global$var”创建),所以它会覆盖其中的值-就像引用工作一样。@Sven哦,我可以使用这两个“名称”中的任何一个来修改该值。现在已经清楚了。(引用是指通过不同的名称访问相同的变量内容。)当您将
$var
声明为全局时,任何局部更改都会全局反映,甚至从函数内部反映出来。您能否给出完整的代码片段以及对实际输出的注释?当前输出与您的预期有何不同?是的。答案是:您正在编写“红色”“转换为$var,因为这是对$GLOBALS的引用(由“global$var”创建),所以它会覆盖其中的值-就像引用的工作方式一样。@Sven哦,我可以使用这两个“名称”中的任何一个来修改该值。现在已经清楚了。(引用是指通过不同的名称访问相同的变量内容。)当您将
$var
声明为全局时,任何局部更改都会全局反映,甚至从函数内部反映。您能给出完整的代码吗