On 17 November 2006 09:55, Michael wrote: > This will be my last post on this thread of discussion. > > Thanks to all who replied, I have it figured out. > > I guess my only problem with the way the !== and === > operators work in this situation is this: > > Logic dictates that if something evaluates to NOT FALSE it > must be TRUE. Um, yes, but it's the *test* that's evaluating to NOT FALSE (and obeys this rule), which says nothing about the actual values involved in the test. Even with the != operator you can demonstrate this point: $x = "yes"; if ($x!=FALSE) { echo "\$x must be TRUE" } will display the message, even though $x contains the string "yes" (because the string "yes" in a Boolean context evaluates to TRUE). > if !== evaluates to TRUE then === should also under the same > conditions (all other things being equal) I don't think that's quite what you meant, but I think I understand the point you were getting at, and it's not valid. If something !==FALSE, then TRUE is one of the values it may be === to -- but so are all the integers, all the floating numbers, all the strings, all possible objects, .... In other words, if $x!==FALSE, it *might* be ===TRUE, but it *might* also be ===0, ===1, ===1.0 (not the same as 1!), ==="hello world", etc. The *test* *itself*, however, would obey that rule -- that the *test* returns a Boolean value says nothing about the types of its operands. > if !== evaluates an integer 0 to TRUE, so should === Neither of them can evaluate an integer 0 to TRUE, as 0 and TRUE are different types. You're confusing how these operators evaluate their operands with the resulting value of the test: the === and !== operators will both evaluate an integer 0 as 0 -- it's the result of the test that will be strictly either TRUE or FALSE. (As it happens, 0 and FALSE also give different values when evaluated by ==/!=, so you'd have the same conceptual problem with those operators). > , it > can't be true and still return a false value. The !== and === > operators work differently, they should be complimentary. No, they work exactly the same. Both of them *first* look at the types of the two values, and *if and only if* the types are the same are the values compared. So: 0!==FALSE will succeed immediately, returning TRUE, because the types differ and: 0===FALSE will fail immediately, returning FALSE, because the types differ which are as you expected the complementary Boolean values. *However*: 1!==FALSE returns TRUE by the same logic, and 1===TRUE returns the complementary FALSE Immediately, then, you can see that we have two values that are both !==FALSE, and yet neither of them is the value TRUE. I'm afraid I've gone on at some length here, but I felt throughout this thread that you really hadn't grasped the underlying conceptual point, and I hope some of my examples may have helped illuminate it for you. Cheers! Mike --------------------------------------------------------------------- Mike Ford, Electronic Information Services Adviser, Learning Support Services, Learning & Information Services, JG125, James Graham Building, Leeds Metropolitan University, Headingley Campus, LEEDS, LS6 3QS, United Kingdom Email: m.ford@xxxxxxxxxxxxxx Tel: +44 113 283 2600 extn 4730 Fax: +44 113 283 3211 To view the terms under which this email is distributed, please go to http://disclaimer.leedsmet.ac.uk/email.htm -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php