1

OK、まず、これは非常に特殊な問題です。私は長い間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;

    }

これらの「エコー」は、この場合のテストに使用されます。したがって、この関数が取得する前に $result は常に = true になります。

しかし、これは私が得た出力です:

permissiontrueResult = 1 IN permission section

つまり、スイッチで $result = Permission 、次に == true 、次に == "permission" を意味します。何故ですか ?

4

3 に答える 3

2

等しいかどうかのチェックではなく、同一性チェック === を使用したい場合があります。

PHP では、空でない文字列は true として解釈されます。

$result = "permission";
if($result)
     echo 'String interpreted as true';

php.net (Short) 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

内容を含む文字列は、ブール値として処理しようとすると、true と評価されます。(まあ、文字列 "0" は False と評価されます。php は変です。)

したがって、変数が実際に true かどうかを確認したい場合は、型もチェックする比較を使用する必要があります。

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

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

すべての出現箇所をに置き換える必要があり==ます===

于 2012-09-02T04:47:11.170 に答える