PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

整型> <类型
Last updated: Mon, 26 Nov 2007

view this page in

布尔型

这是最简单的类型。boolean 表达了真值,可以为 TRUEFALSE

Note: 布尔类型是 PHP 4 引进的。

语法

要指定一个布尔值,使用关键字 TRUEFALSE。两个都不区分大小写。

<?php
$foo 
True// assign the value TRUE to $foo
?>

通常你用某些运算符返回 boolean 值,并将其传递给控制流程

// == is an operator which test
// equality and returns a boolean
if ($action == "show_version") {
    echo "The version is 1.23";
}

// this is not necessary...
if ($show_separators == TRUE) {
    echo "<hr>\n";
}

// ...because you can simply type
if ($show_separators) {
    echo "<hr>\n";
}

转换为布尔值

要明示地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制需要一个 boolean 参数时,该值会被自动转换。

参见类型戏法

当转换为 boolean 时,以下值被认为是 FALSE

所有其它值都被认为是 TRUE(包括任何资源)。
Warning

-1 和其它非零值(不论正负)一样,被认为是 TRUE

<?php
var_dump
((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>



整型> <类型
Last updated: Mon, 26 Nov 2007
 
add a note add a note User Contributed Notes
布尔型
xcerse at gmail dot com
04-Jul-2008 10:02
It does help me!

thanks for sharing the excellent site.
maykelsb [ta] yahoo [tod] com [tod] br
01-Feb-2008 07:54
At http://www.blueshoes.org/en/developer/syntax_exam/, is available a test where you can try your knowledge about boolean expressions. Hope it helps!
Wackzingo
27-Jan-2008 10:39
It is correct that TRUE or FALSE should not be used as constants for the numbers 0 and 1. But there may be times when it might be helpful to see the value of the Boolean as a 1 or 0. Here's how to do it.

$var1 = TRUE;
$var2 = FALSE;

echo $var1; // Will display the number 1

echo $var2; //Will display nothing

To get it to display the number 0 for a false value you have to typecast it:

echo (int)$var2; //This will display the number 0 for false.
Steve
16-Jan-2008 07:00
PHP does not break any rules with the values of true and false.  The value false is not a constant for the number 0, it is a boolean value that indicates false.  The value true is also not a constant for 1, it is a special boolean value that indicates true.  It just happens to cast to integer 1 when you print it or use it in an expression, but it's not the same as a constant for the integer value 1 and you shouldn't use it as one.  Notice what it says at the top of the page:

A boolean expresses a truth value.

It does not say "a boolean expresses a 0 or 1".

It's true that symbolic constants are specifically designed to always and only reference their constant value.  But booleans are not symbolic constants, they are values.  If you're trying to add 2 boolean values you might have other problems in your application.
Anonymous
06-Jan-2008 11:05
Note that the symbolic constants TRUE and FALSE are treated differently.  I was told that this is a feature, not a bug.

echo false ;
echo (false) ;
echo false+false ;
echo (false+false) ;
echo intval(false) ;
echo '"'.false.'"' ;

echo true ;
echo (true) ;
echo true+true ;
echo (true+true) ;
echo intval(true) ;
echo '"'.true.'"' ;

should produce

00000"0"11221"1"

but instead produces

000""11221"1"

In other words, the only way to output the underlying zero or use it in a string is to use 'false+false' or pass it through intval().  No such tricks are required to get at the 1 that underlies true.

The whole idea of symbolic constants is that the underlying value *always* replaces them during translation, and thus anywhere you would otherwise have to use some obscure "magic number" such as 191, you can use a symbolic constant that makes sense, such as TOTAL_NATIONS. 

Exactly what php gets out of breaking this rule was not explained to me.
artktec at gmail dot com
28-Sep-2007 12:37
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
*/
?>
openspecies
13-Jul-2007 11:22
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

@+
Schraalhans Keukenmeester
24-May-2007 01:03
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.
terminatorul at gmail dot com
30-Apr-2007 05:21
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.
12-Mar-2007 11:45
Jasper probably meant:
$a = 2;
$b = 3;
$aBiggerThanB = $a > $b;
andy at txtnation dot com
26-Feb-2007 01:31
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.
jasper at jtey dot com
06-Jun-2006 03:51
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";
?>

整型> <类型
Last updated: Mon, 26 Nov 2007
 
 
show source | credits | sitemap | contact | advertising | mirror sites