|  | Posted by Csaba Gabor on 11/06/07 20:15 
On Nov 6, 9:09 pm, Darko <darko.maksimo...@gmail.com> wrote:> On Nov 6, 9:06 pm, ZeldorBlat <zeldorb...@gmail.com> wrote:
 >
 > > On Nov 6, 2:27 pm, Csaba Gabor <dans...@gmail.com> wrote:
 >
 > > > In the following PHP code, the final printed line shows 'frob:
 > > > something'.  Why is it not 'frob: else'?  After all, if I replace the
 > > > first line with $frob = "something"; test ($frob); then the final
 > > > printed line does show 'frob: else'
 >
 > > > Csaba Gabor from Vienna
 > > > PHP 5.2.4 on WinXP Pro
 >
 > > > test ($frob = "something");
 > > > print "frob: $frob <br>\n";
 >
 > > > function test(&$val) {
 > > >   print "val pre: $val <br>\n";
 > > >   $val = "else";
 > > >   print "val post: $val <br>\n"; }
 >
 > > It's because you're not really passing a variable -- you're passing
 > > the result of an expression.  If you enable E_STRICT you'll get the
 > > following:
 >
 > > Strict Standards: Only variables should be passed by reference
 >
 > > Since you haven't passed a variable, modifying the value inside the
 > > function is only modifying the local value.
 >
 > Yes, I've thought about it and was just coming back to brag about the
 > conclusion, but you were faster. In C++, this is not the behavior, but
 > the assignment operator returns the reference to the left parameter
 > instead, making it possible. In PHP, however, only the value (copy of
 > the value, if you like) is returned from the assignment operator,
 > which passes that as the argument, not the $frob variable.
 
 Thanks to both of you for a very nice explanation,
 Csaba Gabor from Vienna
  Navigation: [Reply to this message] |