在将全局变量更改为函数中的另一个引用时遇到了问题。
RewriteRule ^steckbrief/([0-9A-Za-z-]+)$ index.php?id=steckbrief&art=$1
代码的结果为“ 1”。我真的不明白为什么,我猜想在离开函数作用域后在函数内部更改全局变量将是持久的吗?
除了使用GLOBALS数组之外,什么是好的解决方法?
答案 0 :(得分:2)
在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的答案。
答案 1 :(得分:2)
实际上,这是一个很大的问题。为了使引用从函数返回,请在函数名称之前使用&
,如下所示。
$one = 1;
$two = 2;
$ref = &$one;
$ref = &change();
echo $ref;
$two = 3;
echo $ref;
function &change(){
global $two;
return $two;
}
输出:
23