Reply to Re: Does passing an uninitialized array variable initialize it? (PHP 5)

Your name:

Reply:


Posted by Jerry Stuckle on 07/31/07 02:01

Rik wrote:
> On Tue, 31 Jul 2007 03:20:15 +0200, Jerry Stuckle
> <jstucklex@attglobal.net> wrote:
>
>> Rik wrote:
>>> On Tue, 31 Jul 2007 02:38:04 +0200, Jerry Stuckle
>>> <jstucklex@attglobal.net> wrote:
>>>> I take this back - the result of the operation is unpredictable.
>>>> That's because:
>>>>
>>>> $rank[$i] = trim($rank[$i++]);
>>>>
>>>> $rank[$i++]
>>>>
>>>> is evaluated as $rank[$i]. However, when
>>>>
>>>> $rank[$i]
>>>>
>>>> is evaluated, does it use the old or the new version of $i?
>>> This is indeed dubious. Which of the '[' gets evaluated first?
>>> Allthough, left-associtivity might indicate the first one should be
>>> evaluated first (PHP4 behaviour).
>>> However, for:
>>> $array[$i] = $i++;
>>> Precedence as defined should kick in clearly. The '[' isn't in the
>>> table just for show.
>>>
>>>> The bottom line: don't change a value and use it in the same
>>>> statement. Results are unpredictable.
>>> And makes for more readable code indeed. However, if I read the
>>> documentation I fully expect the PHP4 result from my example, not the
>>> PHP5 one...
>>> --Rik Wasmus
>
> He, still trouble with my sig-seperator? :P
>
>> Rik,
>>
>> The key here is, precedence defines the order of OPERATOR evaluation -
>> but not the order of OPERAND evaluation. A subtle, but important
>> difference in cases like this.
>>
>> For instance, it defines that '++' will be evaluated before '[]',
>
> Well, the other way around.
>

Oops, you're right :-)

>> it doesn't define whether [$i] will use the old or new value of $i++.
>> So even though [$i] is evaluated before [$i++], $i++ is evaluated
>> first and the value of $i is unpredictable.
>
> Hmm, you've got a point there. However, I still wonder what warrented
> the change from PHP4 to PHP5. Maybe it's got something to do with the
> fact references are more integrated, but that's just a wild guess.
>
> What IS clear however, is that this is a nice example why one-liners are
> overrated. Nothing wrong with a few lines if it just clarifies things
> more, especially if it takes close to no extra CPU time and/or memory.
> --Rik Wasmus

Don't know. It could be something as simple as a change in the C
compiler they use to build PHP, or just a change in unrelated code which
had a side effect.

And I agree - while some one-liners are good, a good practice is to not
reuse a variable you're changing in the same statement.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация