PHP在这里“看到”的是什么:
第一的:
$isInsert1 = $test == "update"; // false
<=> $isInsert1 = ($test == "update");
<=> $isInerst1 = ("insert" == "update");
<=> $isInerst1 = (false) // -> false.
第二:
$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
将导致右侧被强制转换为布尔值。当转换为布尔时:
(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";
?>