Re: Does passing an uninitialized array variable initialize it? (PHP 5)
- From: Jerry Stuckle <jstucklex@xxxxxxxxxxxxx>
- Date: Mon, 30 Jul 2007 22:01:01 -0400
Rik wrote:
On Tue, 31 Jul 2007 03:20:15 +0200, Jerry Stuckle <jstucklex@xxxxxxxxxxxxx> wrote:
Rik wrote:On Tue, 31 Jul 2007 02:38:04 +0200, Jerry Stuckle <jstucklex@xxxxxxxxxxxxx> wrote:I take this back - the result of the operation is unpredictable. That's because:This is indeed dubious. Which of the '[' gets evaluated first? Allthough, left-associtivity might indicate the first one should be evaluated first (PHP4 behaviour).
$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?
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@xxxxxxxxxxxxx
==================
.
- References:
- Does passing an uninitialized array variable initialize it? (PHP 5)
- From: google2006
- Re: Does passing an uninitialized array variable initialize it? (PHP 5)
- From: Jerry Stuckle
- Re: Does passing an uninitialized array variable initialize it? (PHP 5)
- From: Jerry Stuckle
- Re: Does passing an uninitialized array variable initialize it? (PHP 5)
- From: Rik
- Re: Does passing an uninitialized array variable initialize it? (PHP 5)
- From: Jerry Stuckle
- Re: Does passing an uninitialized array variable initialize it? (PHP 5)
- From: Rik
- Does passing an uninitialized array variable initialize it? (PHP 5)
- Prev by Date: Re: Does passing an uninitialized array variable initialize it? (PHP 5)
- Next by Date: Re: passing $_POST variables to classes
- Previous by thread: Re: Does passing an uninitialized array variable initialize it? (PHP 5)
- Next by thread: Re: Does passing an uninitialized array variable initialize it? (PHP 5)
- Index(es):
Relevant Pages
|