|
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]
|