PHP多逻辑运算符

时间:2014-08-16 03:26:52

标签: php json logical-operators

试图找出最佳方法。 我有一个PHP函数,用于检查某些内容是否为真,如果是,则返回一些JSON数据。

我遇到的问题是,如果另一个为null,则两者都可以返回数据,或者两者都为真。

这是我尝试过的:

if( $logic_type === true && $description== 'null' ){
    return json_encode( self::returnDataArray( $return_arrs ) );
}

if( $description === true && $logic_type == 'null' ){
    return json_encode( self::returnDataArray( $return_arrs ) );
}

if($description=== true && $logic_type === true ){
    return json_encode( self::returnDataArray( $return_arrs ) );
}

牙齿似乎太长了。 所以我试过了:

if( $logic_type === true && $description== 'null' || $description === true && $logic_type == 'null' || $description=== true && $logic_type === true ){
    return json_encode( self::returnDataArray( $return_arrs ) );
}

但只有在满足最后一个条件时才有效。

3 个答案:

答案 0 :(得分:1)

您应该使用括号来分组您的条件

来自Operator Precedence

  

即使不是绝对必要,也可以经常使用括号   通过明确分组来提高代码的可读性   而不是依赖隐式运算符优先级和关联性。

尝试

if( ($logic_type === true && $description== 'null') || ($description === true && $logic_type == 'null') || ($description=== true && $logic_type === true) ){

    return json_encode( self::returnDataArray( $return_arrs ) );

}

答案 1 :(得分:0)

您必须将$logic_type === true && $description== 'null' ||....括在括号中,因为您使用的是&&||。使用以下代码

if( ($logic_type === true && $description== 'null') || ($description === true && $logic_type == 'null') || ($description=== true && $logic_type === true ))
{
    return json_encode( self::returnDataArray( $return_arrs ) );
}

答案 2 :(得分:0)

这看起来像是使用 exculsive或 A XOR B )的完美示例。这意味着 A B ,但不是两者。在您的情况下,您希望$logic_type为空,或$description为空,但不是两者都为空。那或他们俩都是真的。所以我们可以使用逐位XOR简化表达式:

if( ($logic_type === 'null' ^ $description === 'null') || 
    ($logic_type === true && $description === true) )
{
    return json_encode( self::returnDataArray( $return_arrs ) );
}

请注意,仅当$logic_type$description的唯一可能值为:true'null'时才会显示。