PHP逻辑运算符&&;||问题


PHP Logical Operators && || Question

我试图忽略IE7和IE8,但在使运算符正常工作时遇到了一点问题。

<?php 
    if(stristr(strtolower($_SERVER['HTTP_USER_AGENT']), "msie 8") && (strtolower($_SERVER['HTTP_USER_AGENT']), "msie 7") == false ){
    echo "<script type='"text/javascript'"> 
       $(document).ready(function() {
        // ok
        });
    </script>";
}?>

我的另一个选择没有错误,但功能不正常:

<?php 
    if(stristr(strtolower($_SERVER['HTTP_USER_AGENT']), "msie 8" || ($_SERVER['HTTP_USER_AGENT']), "msie 7") == FALSE){
    echo "<script type='"text/javascript'"> 
       $(document).ready(function() {
        // OK
        });
    </script>";
}?>

!$_SERVER['HTTP_USER_AGENT']看起来不对。它会尝试否定一个字符串——这会给你一个布尔值,它的值永远不能包含"MSIE"(因为它唯一可能的值是零(false)和1(true)。

你可能想移动!到CCD_ 2之前。

现在意识到stristr将采用一组操作数(用户代理字符串和"MSIE8")。为了测试第二个字符串,您需要第二个stristr,如下所示:

<?php 
    if(!stristr($_SERVER['HTTP_USER_AGENT'], "msie 8") &&
       !stristr($_SERVER['HTTP_USER_AGENT'], "msie 7"))
    {
        echo "<script type='"text/javascript'"> 
            $(document).ready(function() {
                // OK
            });
            </script>
        ";
    }
?>

注意,您根本不需要strtolower,因为您使用的是stristr(不区分大小写)。

我猜您的意思是,如果是而不是IE7/IE8,您只想打印if内部的代码。

在这种情况下,您需要:

<?php 
    if( (stristr($_SERVER['HTTP_USER_AGENT'], "msie 8") === FALSE) && 
        (stristr($_SERVER['HTTP_USER_AGENT'], "msie 7") === FALSE) ) {
        echo "<script type='"text/javascript'"> 
            $(document).ready(function() {
            // ok
            });
            </script>";
    }
?>

您错过了对stristr的第二次呼叫。此外,正如cHao所提到的,您需要检查是否严格相等(类型也是如此),并且strtolower是不必要的。即使以某种方式证明严格的相等并不是真的所必需的,使用严格的检查可以帮助您记住并在代码中清楚地表明发生了什么。