Re: TRUE and FALSE are treated differently



In article <v5o6o35l542rgmvhki3rabgct1umn3fj47@xxxxxxx>,
A Bit Narked <anonymous@xxxxxxxxxxx> 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.

There isn't and there shouldn't be.

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.

What makes more sense is to assert that the result "echo true;" is
undefined.

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.

It is internally consistent. I can rely on true and false having those
values respectively. And that's all you need to know. The notion of them
having some "underlying value" is unnecessary.

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.

Nah, it'll be your code that violates things to buggery, as you insist
in your delusion.

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'.

No, we've moved on.
.



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: 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.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)