The Arcive of Official vBulletin Modifications Site.It is not a VB3 engine, just a parsed copy! |
|
#1
|
|||
|
|||
PHP references question
I suspect I'm missing something very obvious here. Can someone explain the behaviour of this code:
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 />"; ?> 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. |
#2
|
|||
|
|||
What values were you expecting?
PHP Code:
and PHP Code:
I know I'm not explaining it that well, there's a section in the PHP manual dedicated to explaining references over at php.net. |
#3
|
|||
|
|||
I was expecting $GLOBALS['abc'] to be identical to global $abc inside the function, and it isn't.
As you say, it's explained in the php help manual: Warning If you assign a reference to a variable declared global inside a function, the reference will be visible only inside the function. You can avoid this by using the $GLOBALS array. Think about global $var; as a shortcut to $var =& $GLOBALS['var'];. Thus assigning other reference to $var only changes the local variable's reference. I didn't get that far on that page. |
Thread Tools | |
Display Modes | |
|
|
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|