试图找出最佳方法。 我有一个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 ) );
}
但只有在满足最后一个条件时才有效。
答案 0 :(得分:1)
您应该使用括号来分组您的条件
即使不是绝对必要,也可以经常使用括号 通过明确分组来提高代码的可读性 而不是依赖隐式运算符优先级和关联性。
尝试
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'
时才会显示。