RE: [PHP] Destroying Sessions

From: Date: Fri, 10 May 2002 11:50:40 +0000
Subject: RE: [PHP] Destroying Sessions
Groups: php.general 
Request: Send a blank email to php-general+get-96938@lists.php.net to get a copy of this message
> -----Original Message----- > From: Chris Knipe [mailto:savage@savage.za.org] > Sent: 10 May 2002 04:38 > > Just to clarify myself above... > if ($var1 = $var2) { ..... > > In my crazy head, I see $var1 and $var2 to be in a sort of > "read-only" state > inside the () of the if statement. For a if statement to be > able to change > the values in that instance, would be wrong for me. > Afterall, the logic of > a if statement does go something in the lines of "if value > equals value then > execute this, else, execute that" etc etc etc.... There's > nothing in that > logic of setting or changing any values.... ? That's not really correct. Strictly speaking, what's inside the () of an if (or while, or switch, ...) is an expression -- and in PHP (as in many C-like languages) an assignment is actually an expression the result of which is the value assigned. This is why constructs such as a = b = c = 0 work: the assignment expression "c = 0" is first evaluated, giving the result 0; this result is then assigned to b, also giving the result 0, which is then assigned to a. But back to the if problem; consider: if (func($y)): // lots of code using func($y) several times endif; Well, if func($y) is some big function that is costly to execute, you really don't want to be re-evaluating it each time you want the result, so you might think of recoding this as: $x = func($y); if ($x): // lots of code using $x several times endif; which only evaluates func($y) once. But using the assignment-as-expression technique, you can shorthand this as: if ($x = func($y)): // lots of code using $x several times endif; Now, this might no seem like much of an advantage, but look at this while loop: while ($x = func($y)): // lots of code using $x several times endwhile; Without the assignment-as-expression in the while (), you'd have to code this as: $x = func($y); while ($x): // lots of code using $x several times $x = func($y); endwhile; Not only are you having to duplicate the assignment, the duplicates may be several hundred lines of code apart; the shorthand is clearer, less error-prone, and probably fractionally more efficient to boot! Of course, this can also lead to strange-looking constructs such as: if ( ($x = func($y)) == 1): which, when you break it down, actually makes perfect sense (exercise for the reader!) Finally, a quick reference for =, ==, and ===: = assignment operator == equality test (values must be equivalent) === "strict equality" test (values AND TYPES must match) NOTE: the == equality test checks for equivalent values, using automatic type conversion if necessary; this can sometimes lead to unexpected results, since 0 == "abc" and "0" == FALSE. Use the === operator if you want to be sure that two values are absolutely identical. Hope this little lot helps a bit! Cheers! Mike --------------------------------------------------------------------- Mike Ford, Electronic Information Services Adviser, Learning Support Services, Learning & Information Services, JG125, James Graham Building, Leeds Metropolitan University, Beckett Park, LEEDS, LS6 3QS, United Kingdom Email: m.ford@lmu.ac.uk Tel: +44 113 283 2600 extn 4730 Fax: +44 113 283 3211

« previous php.general (#96938) next »