|
Booleans
This is the easiest type. A boolean expresses a
truth value. It can be either
Note:
The boolean type was introduced in PHP 4.
To specify a boolean literal, use either the keyword <?php Usually you use some kind of operator which returns a boolean value, and then pass it on to a control structure. <?php
To explicitly convert a value to boolean, use either
the See also Type Juggling.
When converting to boolean, the following values
are considered
Every other value is considered
Warning:
<?php Related Examples ( Source code ) » language.types.boolean Examples ( Source code ) » PHP provides a couple of constants especially for use as Booleans Code Examples / Notes » language.types.booleanjasper
The following expressions are equivalent: <?php // setting true $flag = true; $flag = True; $flag = TRUE; $flag = 1==1; // setting false $flag = false; $flag = False; $flag = FALSE; $flag = 1==2; ?> The moral of the story is that boolean operators return a boolean value, i.e., "1==1" returns a boolean value of true. Someone who is not aware of this may write a block of code such as: <?php // even number? $num = 10; if($num % 2 == 0){ $isEven = true; } else{ $isEven = false; } ?> when all that is needed is: <?php $num = 10; $isEven = $num % 2 == 0; ?> Other examples, for illustrative purposes: <?php // two numbers $a = 2; $b = 3; $aBiggerThanB = 2 > 3; // $aBiggerThanB is set to false // lower case vowel check (corrected) $c = "u"; $isVowel = $c == "a"|| $c == "e"|| $c == "i"|| $c == "o"|| $c == "u"; ?> andy
Re: comment from jasper at jtey dot com It is better to not explicitly test for default values. PHP knows the default values, and so should any programmer worth her/his salt. Same example rewritten: <?php $num = 10; $isEven = !($num % 2); ?> The braces are off course optional. schraalhans keukenmeester
Re: andy at txtnation dot com <quote> The braces are of course optional </quote> Nothing optional about the 'braces' here. '( )' are parentheses. '{ }' are braces. But we get the point. <?php $num = 10; $isEven = !($num % 2); echo ($isEven) ? 'Even' : 'Odd'; //outputs : Even $isEven = !$num % 2; echo ($isEven) ? 'Even' : 'Odd'; //outputs : Odd (with ANY number != 0 !!) ?> Operator precedence and implicit casts at work: $num = 10; !$num => (implicit cast to bool) $num: (bool) 10 = true !true => negate true : false false % 2 => (implicit cast to int) false : (int) false = 0 0 % 2 => remainder of 0 intdiv 2 : 0 $isEven = 0 => integer assignment : 0 ($isEven) ? => (implicit cast to bool) 0 : (bool) 0 = false echo (false) ? 'Even' : 'Odd' => condition false : 'Odd' Wether or not PHP actually performs the (bool) casts under the hood is irrelevant to the outcome here. artktec
Note you can also use the '!' to convert a number to a boolean, as if it was an explicit (bool) cast then NOT. So you can do something like: <?php $t = !0; // This will === true; $f = !1; // This will === false; ?> And non-integers are casted as if to bool, then NOT. Example: <?php $a = !array(); // This will === true; $a = !array('a'); // This will === false; $s = !""; // This will === true; $s = !"hello"; // This will === false; ?> To cast as if using a (bool) you can NOT the NOT with "!!" (double '!'), then you are casting to the correct (bool). Example: <?php $a = !!array(); // This will === false; (as expected) /* This can be a substitute for count($array) > 0 or !(empty($array)) to check to see if an array is empty or not (you would use: !!$array). */ $status = (!!$array ? 'complete' : 'incomplete'); $s = !!"testing"; // This will === true; (as expected) /* Note: normal casting rules apply so a !!"0" would evaluate to an === false */ ?> 12-mar-2007 03:45
Jasper probably meant: $a = 2; $b = 3; $aBiggerThanB = $a > $b; openspecies
function is_odd($x) { return ($x & 1); //integer } function is_even($x) { return (!($x & 1)); //integer } if(is_even(10) === TRUE) // NO function is_odd($x) { return (bool) ($x & 1); //boolean } function is_even($x) { return (bool) (!($x & 1)); //boolean } if(is_even(10) === TRUE) // YES $str = 'Hello World!'; if($str === TRUE) // ecetera @+ terminatorul
Beware that "0.00" converts to boolean TRUE ! You may get such a string from your database, if you have columns of type DECIMAL or CURRENCY. In such cases you have to explicitly check if the value is != 0 or to explicitly convert the value to int also, not only to boolean. |