好的,首先,这是一个非常特殊的问题。我在PHP上工作了很长时间,我不知道为什么会这样。
我有一个功能adminUpdate。此函数将返回true。我设置它总是返回true进行测试。
然后我有功能取得结果。
static function result2JSON($result,$options = array()) {
if($result == "permission") {
echo "permission";
}
if($result == true) {
echo "true";
}
switch ($result) {
case 'permission':
die($result."xxx permission");
$json = self::setJSON("Permission");
break;
case 'exist':
$json = self::setJSON("Exist");
break;
case false:
$json = self::setJSON("Error");
break;
case "":
$json = self::setJSON("Error");
break;
case 1 :
$json = self::setJSON("OK");
break;
case true:
$json = self::setJSON("OK");
break;
default:
$json = self::setJSON("OK");
break;
}
$json = array_merge($json,$options);
return $json;
}
这些“Echo”用于测试此案例。 所以,$ result总是= true才能被这个函数占用。
但这是我得到的输出:
permissiontrueResult = 1 IN permission section
这意味着$ result = Permission,然后== true,然后在开关上==“permission”。 那是为什么?
答案 0 :(得分:2)
您可能希望使用身份检查===而不是检查是否相等。
在php中,非空字符串被解释为true。
$result = "permission";
if($result)
echo 'String interpreted as true';
查看php.net上的布尔页面(简称)http://php.net/manual/en/language.types.boolean.php 和PHP比较运算符页面... http://www.php.net/manual/en/language.operators.comparison.php
答案 1 :(得分:1)
如果您尝试将它们视为布尔值,则包含其中内容的字符串将评估为true。 (好吧,字符串“0”的计算结果为False.php很奇怪。)
因此,如果您想查看某个变量是否确实为真,您必须使用同时检查类型的比较:
if ($result === "permission") { ... }
if ($result === True) { ... }
答案 2 :(得分:0)
您应该使用==
===
的每一个匹配项