Why does the following return 1
instead of true
?
echo 5===5; //1;
First of all, echo
is not a function, it is a language construct and it does not actually "return" anything. echo
is for outputting strings. The reason it outputs (not returns) 1
instead of true
is because true
is not a string, it is a boolean value and therefore when it is typecast to a string, PHP converts it to "1"
. If you want to see the real value of something, you need to use something like var_dump()
.
var_dump(true);
var_dump((string) true);
var_dump(5 === 5);
var_dump(false);
var_dump((string) false);
var_dump(5 === 6);
Output:
bool(true)
string(1) "1"
bool(true)
bool(false)
string(0) ""
bool(false)
According to the PHP documentation, for string comparison:
A boolean TRUE value is converted to the string "1". Boolean FALSE is converted to "" (the empty string). This allows conversion back and forth between boolean and string values.
In simplistic terms 5===5
is true. The output of it though, when you cast it to a string is "1" (As noted above). To return the type/value of a string, you should use var_dump()
, which will show the correct type:
var_dump(5===5); //bool(true);
See this output.
you can try also:
echo (1===1) === true
or echo true
;)
echo casts boolean to string.