Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP If-then和switch语句不工作_Php_Mysql_Zend Framework - Fatal编程技术网

PHP If-then和switch语句不工作

PHP If-then和switch语句不工作,php,mysql,zend-framework,Php,Mysql,Zend Framework,好的,首先,这是一个非常特殊的问题。我在PHP上工作了很长时间,我不知道为什么会发生这种情况 我有一个函数adminUpdate。此函数将返回true。我将其设置为始终返回真以进行测试 然后我得到了这个结果 static function result2JSON($result,$options = array()) { if($result == "permission") { echo "permission"; }

好的,首先,这是一个非常特殊的问题。我在PHP上工作了很长时间,我不知道为什么会发生这种情况

我有一个函数adminUpdate。此函数将返回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”。
为什么会这样?

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

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

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

if ($result === True) { ... }

您应该将每次出现的
==
替换为
==

您可能希望使用标识检查===而不是检查是否相等

在php中,非空字符串被解释为true

$result = "permission";
if($result)
     echo 'String interpreted as true';
看看php.net上的布尔页面(简短) 和PHP比较运算符页面。。。

使用
==
来比较值,或者
否则,如果
谢谢大家,现在我知道了,这个例子不能使用switch,因为它混合了真、假字符串。这个案例必须是if | elseif@njk阅读我的答案应该能为聪明的读者提供足够的信息,让他们去阅读手册中的更多内容(或者,他们可以问)-当答案无效时,应单击1。现在,是吗?否决投票是主观的。我觉得你的答案太简单了,没有提供“为什么”,只是“什么”。也许是把OP引向比较运算符?我认为你的回答很简单,只是一种恭维!任何你做或想做的事情都应该被认为是主观的:),但是,假设你将按照SO的指导方针行事,那么应该根据答案的有用性进行上/下投票。将光标放在向下投票箭头上查看定义。一个有用的答案可以解释为什么需要进行更改。我不同意:)一个有用的答案可以“推动”你朝着正确的方向前进,并鼓励你进一步钻研和自学。不是一个能“喂饱”你的答案。