Re: TRUE and FALSE are treated differently



A Bit Narked wrote:
On Sun, 6 Jan 2008 23:19:45 +0000,
Toby A Inkster <usenet200712@xxxxxxxxxxxxxxxxx> wrote:

A Bit Narked wrote:

And yet you can echo true. The output is '1'.
No -- you can't echo a boolean in PHP. Why you try, the boolean is implicitly cast to a string.

This:

echo $bool;

is actually executed as if you coded this:

echo (string)$bool;

If you look up the manual on type casting, you'll find that FALSE is cast to an empty string, and TRUE is cast to a non-empty string.

If you cast to an integer instead of a string, then you'll find that FALSE is cast to 0, which seems to be what you want.

echo (int)FALSE;

Apologies for imprecise expression :-) PHP provides free
casting (e.g. to string in echo) so I ignore it.

My real point is that there is no logical relationship between a
boolean value of TRUE and a string value '1' _except_ where the
same relationship yields a string value '0' for boolean FALSE.
I.e., the C precedent.

I'm not fashed by the idea that there's a special boolean type
whose values are TRUE and FALSE. But logically, the string
representations of such sui generis values should be 'true' and
'false'. There is no logic whatever in string representions of
'1' and ''. No one has articulated a relationship such that
'1' and '' makes any sort of sense.

One of the basic principles of good design is predictability.
'From one thing know ten thousand things' as the Chinese stated
it ages ago. So if there's a well-known precedent, we should
follow it unless we have a powerful reason for not doing ('Ensure
that everyone after us makes the same mistake we did', as Maurice
Wilkes put it, to appreciative laughter). And whatever we do
should be internally consistent. So the calling sequence for
some new function should be guessable by anyone who knows the
sequences of similar functions, one value should tell us about
neighboring values, and so forth.

The PHP developers' choice for the string reps of true and false
violate this principle all to buggery, which is what got up my
nostril.

I thought everyone here would immediately see how daft it is, but
I expect we're circling the drain as a species precisely because
so many people -even very smart ones- go through life accepting
without examination that 'whatever is, is right'.


Sorry, but it makes perfect sense.

C does not have real boolean values "true" or "false". Rather, it gimmicks them up by saying anything with a non-zero value is true, and anything with a zero value is false. One of the problems is that both 1 and 2 are considered true - but in this case true != true (1 != 2).

PHP does have a real boolean "type" with the values "true" and "false". So true == true all the time.

PHP can also do conversions. Like with C, anything with a non-zero value is true, and anything with a zero value is false. This includes an empty string.

And if we kept doing things the same old way, we'd still be rubbing sticks together to keep the cave warm. Progress always means change.

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

.



Relevant Pages

  • Re: TRUE and FALSE are treated differently
    ... No -- you can't echo a boolean in PHP. ... the boolean is implicitly cast to a string. ... If you look up the manual on type casting, you'll find that FALSE is cast to an empty string, and TRUE is cast to a non-empty string. ...
    (comp.lang.php)
  • Re: Error whilst processing ORDER BY clause
    ... My guess would be that you need to CAST it to a boolean since it is assuming ... > We receieve the error "Error whilst processing ORDER BY clause in the SQL ... name in the clause to reference a string or int data type it also succeeds, ... Can we use a CAST ...
    (microsoft.public.exchange2000.applications)
  • Re: Error whilst processing ORDER BY clause
    ... My guess would be that you need to CAST it to a boolean since it is assuming ... > We receieve the error "Error whilst processing ORDER BY clause in the SQL ... name in the clause to reference a string or int data type it also succeeds, ... Can we use a CAST ...
    (microsoft.public.exchange2000.information.store)
  • Re: Error whilst processing ORDER BY clause
    ... My guess would be that you need to CAST it to a boolean since it is assuming ... > We receieve the error "Error whilst processing ORDER BY clause in the SQL ... name in the clause to reference a string or int data type it also succeeds, ... Can we use a CAST ...
    (microsoft.public.exchange2000.development)
  • Re: Error whilst processing ORDER BY clause
    ... My guess would be that you need to CAST it to a boolean since it is assuming ... > We receieve the error "Error whilst processing ORDER BY clause in the SQL ... name in the clause to reference a string or int data type it also succeeds, ... Can we use a CAST ...
    (microsoft.public.exchange2000.general)