ここでPHPが「見ている」もの:
最初:
$isInsert1 = $test == "update"; // false
<=> $isInsert1 = ($test == "update");
<=> $isInerst1 = ("insert" == "update");
<=> $isInerst1 = (false) // -> false.
2番目:
$isInsert2 = (boolean) ($test == "update"); // false
<=> $isInerst2 = (boolean) ("insert" == "update");
<=> $isInerst2 = (boolean) (false);
<=> $isInsert2 = false; // false
三番:
$isInsert3 = (boolean) $test == "update"; // true
<=> $isInsert3 = (((boolean) $test) == "update"); //$test "isset"
<=> $isInsert3 = (true == "update"); //"update" "isset" ps.: true === "update" would be false!
<=> $isInsert3 = (true); // -> true
参照: http://php.net/manual/en/language.operators.precedence.php
あなたの主な「混乱」は事実だと思いtrue == "update"
ますtrue
。これは、==
PHP では等しいことを意味しますが、同じことを===
意味するためです。
詳細については、こちらをご覧ください: http://www.php.net/manual/en/language.operators.comparison.php
bool == ANYTHING
右側が bool にキャストされます。そしてブールにキャストするとき:
(boolean)1 == (boolean)2 == (boolean)"AnyNotEmptyString" == true
と
false == (boolean)0 == (boolean)null == (boolean)""
. (そして私が逃したものは何でも)
注:ブール値の文字列表現が問題のブール値にキャストされることさえありません。文字列をブール値と比較する場合、重要なのは文字列が空 (または null、または "0") かどうかだけです。それなら間違いです!:
(Boolean)"false" == false // -> will return false
(Boolean)"false" == true // -> will return true.
(Boolean)"true" == true // -> will return true.
(Boolean)"true" == false// -> will return false.
(Boolean)"0" == true // -> will return false.
(Boolean)"0" == false// -> will return true.
抜粋:
<?php
echo ((Boolean)"false" == false)?"true":"false";
echo "<br />";
echo ((Boolean)"false" == true)?"true":"false";
echo "<br />";
echo ((Boolean)"true" == true)?"true":"false";
echo "<br />";
echo ((Boolean)"true" == false)?"true":"false";
echo "<br />";
echo ((Boolean)"0" == true)?"true":"false";
echo "<br />";
echo ((Boolean)"0" == false)?"true":"false";
?>