在函数php中更改全局variabele引用

时间:2018-10-14 14:47:41

标签: php scope reference global-variables

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

RewriteRule ^steckbrief/([0-9A-Za-z-]+)$ index.php?id=steckbrief&art=$1

代码的结果为“ 1”。我真的不明白为什么,我猜想在离开函数作用域后在函数内部更改全局变量将是持久的吗?

除了使用GLOBALS数组之外,什么是好的解决方法?

2 个答案:

答案 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