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
@+
論理型は、最も簡単な型です。boolean は、真偽の値を表します。 この値は、TRUE または FALSE のどちらかになります。
注意: 論理型は、PHP 4 で導入されました。
boolean リテラルを指定するには、キーワード TRUE または FALSE を指定してください。 両方とも大文字小文字に依存しません。
<?php
$foo = True; // 値TRUEを$fooに代入する
?>
通常、boolean 型の値を返す演算子を使用してから、 制御構造にその結果を渡します。
<?php
// == は、boolean型を返す演算子
if ($action == "show_version") {
echo "バージョンは1.23です。";
}
// これは冗長
if ($show_separators == TRUE) {
echo "<hr>\n";
}
// 上の例は次のように簡単に書くことができます。
if ($show_separators) {
echo "<hr>\n";
}
?>
boolean に明示的に変換を行うには、キャスト (bool) または (boolean) を使用します。しかし、演算子、関数、制御構造が boolean 型の引数を必要とする場合には、値は自動的に変換されるため、 多くの場合はキャストは不要です。
型の相互変換 も参照ください。
boolean に変換する場合、次の値は FALSE とみなされます。
その他の値は全て TRUE とみなされます (全ての
resourceを含みます)。
警告
-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)
?>
論理型 (boolean)
openspecies
14-Jul-2007 12:22
14-Jul-2007 12:22
Schraalhans Keukenmeester
24-May-2007 02:03
24-May-2007 02: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 06:21
30-Apr-2007 06: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.
13-Mar-2007 12:45
Jasper probably meant:
$a = 2;
$b = 3;
$aBiggerThanB = $a > $b;
andy at txtnation dot com
26-Feb-2007 02:31
26-Feb-2007 02: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 04:51
06-Jun-2006 04: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";
?>