Robert Cummings wrote: > On Fri, 2006-11-17 at 02:54 -0700, 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. >> Regardless of the type, regardless of the species, breed, flavor etc. > > Sure logic dictates that if a return type is confined to the boolean set > then if it is not false it must be true; however, strpos() may return a > value from the set of booleans or a value from the set of integers. As liar liar pants on fire. just to confuse matters (the OP deserves it given the length of the thread): strpos() may return a boolean false or a value from the set of integers - it will never ever return true (unless you hack the php source) friday afternoon nitpicking - which is sometimes referred to as 'ant-***ing' where I come from ;-) > such, it can have many more return values than only 2. > >> if !== evaluates to TRUE then === should also under the same conditions (all other things being equal) > > Nope. There are two conditions checkeck when using !== and ===. One > check is the type, the other check is the value. This leaves 4 possible > scenarios: > > true - if an only if the type an the value are the same > false - if the type is not the same > false - if the value is not the same > false - if the type and value are not the same > >> if !== evaluates an integer 0 to TRUE, so should ===, it can't be true and still return a false value. > > An integer 0 is not evaluated to true, a comparison to see if an value > is exactly equal to the integer 0 may return true. > >> The !== and === operators work differently, they should be >> complimentary. > > Actually they work the same... I'll demonstrate: > > <?php > > function equals_equals_equals( $value1, $value2 ) > { > if( get_type( $value1 ) == get_type( $value2 ) > && > $value1 == $value2 ) > { > return true; > } > > return false; > } > > function not_equals_equals( $value1, $value2 ) > { > return !equals_equals_equals( $value1, $value2 ); > } > > ?> > > So there you have it. The implementation of not_equals_equals() uses > the ! operator on the equals_equals_equals() function and this will give > you the same behaviour as your currently experiencing and having trouble > swallowing. > > Cheers, > Rob. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php