PHPの数行に疑問があります。
次のコードがあります。
// returns TRUE if a day is festive, FALSE otherwise
$festive = isFestive();
//
$workingDay = $d>0 && !$festive;
$workingDay = $d>0 && !$festive
と同じですか$workingDay = $d>0 && $festive==FALSE;
?
どんな助けでも大歓迎です。
PHPの数行に疑問があります。
次のコードがあります。
// returns TRUE if a day is festive, FALSE otherwise
$festive = isFestive();
//
$workingDay = $d>0 && !$festive;
$workingDay = $d>0 && !$festive
と同じですか$workingDay = $d>0 && $festive==FALSE;
?
どんな助けでも大歓迎です。
はい、そうです。代わりにそうする場合は異なります。$festive === FALSE
その場合、「偽」である の値は$festive
真を返さないためです。正確には FALSE ではないからです。
データ型と、PHP が非ブール型のさまざまな値を「false」として扱う方法がすべてです。これを説明するために、次のスニペットを確認してください。
<?php
$test = false;
$test2 = null;
$test3 = 0;
$test4 = '';
$test5 = array();
var_dump($test == false);
var_dump($test2 == false);
var_dump($test3 == false);
var_dump($test4 == false);
var_dump($test5 == false);
var_dump($test === false);
var_dump($test2 === false);
var_dump($test3 === false);
var_dump($test4 === false);
var_dump($test5 === false);
結果の出力(フォーマット済み):
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)
bool(false)
bool(false)
任意if()
の式は、 または のいずれかに評価されfalse
ますtrue
。式が明示的にブール値でない場合は、ブール値に変換されてから評価されます。PHP が特定の型を boolean に変換する方法を次に示します。一般に、値 (数値、非ブール値) がゼロ以外の場合、それは と見なされTRUE
ます。PHP が式を評価する方法の詳細については、このドキュメントを参照してください。
したがって、あなたの場合、実際の値に$d>0
応じてブール値に評価されますが、 forは最初にブール値に変換されてから否定されます ( 、つまり、数値の値である場合は、 (非ゼロ) に変換されてから否定されるため、式は に評価されます。$d
!$festive
$festive
!
$festive
2
TRUE
!$festive
FALSE
追加の注意: 論理条件がAND
( &&
) であるため、ブール代数が常に$d>0
であるため、 が に評価される場合は評価されfalse
ません。!$festive
false && <anything>
false