1

好的,首先,这是一个非常特殊的问题。我在 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" on switch。这是为什么 ?

4

3 回答 3

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

于 2012-09-02T04:48:31.330 回答
1

如果您尝试将它们视为布尔值,则其中包含内容的字符串评估为真。(好吧,字符串“0”的计算结果为 False。php 很奇怪。)

因此,如果您想查看变量是否真的为真,您必须使用同时检查类型的比较:

if ($result === "permission") { ... }

if ($result === True) { ... }
于 2012-09-02T04:47:02.027 回答
0

你应该=====

于 2012-09-02T04:47:11.170 回答