【问题标题】:Changing global variabele reference inside a function php在函数php中更改全局变量引用
【发布时间】:2019-03-19 02:54:13
【问题描述】:

我在将全局变量更改为函数内的另一个引用时遇到了问题。

$one = 1;
$two = 2;
$ref = &$one;

change();
echo $ref;

function change(){
    global $ref, $two;
    $ref = &$two;
}

代码的结果是“1”。我真的不明白为什么,我猜想改变函数内部的全局变量它会在离开函数范围后保持不变?

什么是好的解决方法(除了使用 GLOBALS 数组)?

【问题讨论】:

  • 试试$ref = $two;

标签: php scope reference global-variables


【解决方案1】:

在 PHP 中,引用不是指针。它类似于另一个变量的别名。我将解释您的代码会发生什么:

$one = 1;
$two = 2;
$ref = &$one;

经过上面的三个命令,我们有:

variables   | $one | $ref | $two |
content     |    1        | 2    |

如您所见,$one$ref 指的是相同的 内容,这就是术语reference 的含义。继续:

global $ref, $two;

根据this document,上述命令同:

$ref =& $GLOBALS['ref'];
$two =& $GLOBALS['two'];

所以,我们有:

variables   | $one (global) | $ref(global) | $ref (local) | $two (global) | $two (local) |
content     |                    1                        |               2              |

是的,我们有 5 个变量!继续:

$ref = &$two;

其实是:

$ref (local) = &$two (local);

所以我们有:

variables   | $one (global) | $ref(global) | $ref (local) | $two (global) | $two (local) |
content     |                    1         |                        2                    |

最后一个命令:

echo $ref;

其实是:

echo $ref (global);

而且,1 是正确的值!

补充:

change();
echo $two;

function change(){
    global $ref, $two;
    $ref = &$two;
    $ref = 9;
}

这段代码的结果是9;

----- 编辑-----

我没有仔细阅读这个问题。我的答案是The result of the code is "1". I don't really understand why。乔纳森·加涅 (Jonathan Gagne) 的答案就是您正在寻找的。

【讨论】:

  • 你没有成功,兄弟。回声输出9 只是因为您在函数内部分配了它。他只需要在函数名前使用&。如果他更改了他的变量$two 的值,它不会引用$ref 变量。请看我的解决方案,你会明白他的要求。
  • 我编辑了我的答案。我没有仔细阅读这个问题。但是,我的回答有问题吗?
  • 与他的问题有关,如果你输入$one = 1; $two = 2; $ref = &$one; echo $ref; change(); echo $ref; $two = 3; echo $ref;,它将输出199而不是193。但是,您的回答对 PHP 全局变量确实很有启发性和描述性。但并不代表这个问题的解决方案。顺便说一句,谢谢!
【解决方案2】:

其实这是一个很好的问题。为了让函数返回引用,请在函数名称前使用&,如下所示。

$one = 1;
$two = 2;
$ref = &$one;

$ref = &change();
echo $ref;
$two = 3;
echo $ref;

function &change(){
    global $two;
    return $two;
}

输出:

23

【讨论】:

  • 最后,我们采用了不同的解决方案,并使用文件包含而不是函数作为解决方法。不是一个非常简洁的解决方案,但在我们拥有的情况下,它比使用返回值(引用)并在函数外部更改变量要好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 2013-10-04
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
相关资源
最近更新 更多