AndrewD
08-23-2008, 11:42 AM
I suspect I'm missing something very obvious here. Can someone explain the behaviour of this code:
<?php
$test = "12345";
$anothertest = "";
$yetanothertest = "";
function getref() {
global $test;
global $anothertest;
global $yetanothertest;
$anothertest =& $test;
$GLOBALS['yetanothertest'] =& $test;
echo "<br /><br />Inside<br />";
echo "test:".$test."<br />";
echo "anothertest:".$anothertest."<br />";
echo "yetanothertest:".$yetanothertest."<br />";
}
getref();
echo "<br /><br />Outside<br />";
echo "test:".$test."<br />";
echo "anothertest:".$anothertest."<br />";
echo "yetanothertest:".$yetanothertest."<br />";
echo "<br /><br />";
?>
which prints out
Inside
test:12345
anothertest:12345
yetanothertest:
Outside
test:12345
anothertest:
yetanothertest:12345
In other words, within the function, the reference assignment seems to have updated $anothertest but not $yetanothertest, yet having left the function, it's the other way round.
With direct assignments ($A = $B) instead of references ($A =& $B), both of the global variables are updated and correctly displayed inside and outside the function.
<?php
$test = "12345";
$anothertest = "";
$yetanothertest = "";
function getref() {
global $test;
global $anothertest;
global $yetanothertest;
$anothertest =& $test;
$GLOBALS['yetanothertest'] =& $test;
echo "<br /><br />Inside<br />";
echo "test:".$test."<br />";
echo "anothertest:".$anothertest."<br />";
echo "yetanothertest:".$yetanothertest."<br />";
}
getref();
echo "<br /><br />Outside<br />";
echo "test:".$test."<br />";
echo "anothertest:".$anothertest."<br />";
echo "yetanothertest:".$yetanothertest."<br />";
echo "<br /><br />";
?>
which prints out
Inside
test:12345
anothertest:12345
yetanothertest:
Outside
test:12345
anothertest:
yetanothertest:12345
In other words, within the function, the reference assignment seems to have updated $anothertest but not $yetanothertest, yet having left the function, it's the other way round.
With direct assignments ($A = $B) instead of references ($A =& $B), both of the global variables are updated and correctly displayed inside and outside the function.