Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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字符串比较有效?_Php_String Comparison_Boolean Logic - Fatal编程技术网

为什么这个php字符串比较有效?

为什么这个php字符串比较有效?,php,string-comparison,boolean-logic,Php,String Comparison,Boolean Logic,守则: $fn0 ='Joe'; $sn = 'Bloggs'; $fn1 = 'Joseph'; if ( (!strcasecmp($fn0, $first_name)) ||(!strcasecmp($fn1, $first_name)) &&(!strcasecmp($sn, $last_name)) ){ echo('<h3>Hello Joe Bloggs!</h3>

守则:

  $fn0 ='Joe';
  $sn = 'Bloggs';
  $fn1 = 'Joseph';
  if (  (!strcasecmp($fn0, $first_name))
        ||(!strcasecmp($fn1, $first_name))
        &&(!strcasecmp($sn, $last_name))
      ){
        echo('<h3>Hello Joe Bloggs!</h3>');
        }
$fn0='Joe';
$sn='Bloggs';
$fn1=‘约瑟夫’;
如果((!strcasecmp($fn0,$first_name))
||(!strcasecmp($fn1,$first_name))
&&(!strcasecmp($sn,$last_name))
){
echo(“你好,乔·布洛格斯!”);
}
工作完美

但是为什么呢

如果不是(fn0)或不是(fn1),也不是(sn),则打印“Hello Joe Bloggs”

当然,对于不是Joe Bloggs的所有内容,它都应该显示“hello Joe Bloggs”,但事实并非如此:它将显示上面的消息iff($first_name==“Joe”| |“joseph”)&&&$last_name==“Bloggs”


有人能破译吗?

在第一次比较结果为真后,不需要“或”条件。当然,我们必须假设$first_name在某处有某种定义

看看你的括号

if ( ( !strcasecmp($fn0, $first_name) || !strcasecmp($fn1, $first_name) )
    && ( !strcasecmp($sn, $last_name) ) ) {
...
}

错误在于
|
&
的逻辑。如果第一个检查为真,其余检查将被忽略

,因为<代码>!0==true。如果(不是(fn0)或不是(fn1))==true和不是(sn)==true,则打印…@bukifixart您是对的-但这不是答案。我认为DCoder是正确的:它返回0,被解释为“false”;所以这个值的否定是必需的——相当混乱。那么,“非真解释值”的否定应该是真的,混乱在哪里呢?那么,以这种方式设计函数是令人困惑的;如果相等的话,我会期望它返回真值;虽然不是直观的,但是可以很容易地处理.m(请看:“如果str1小于str2,则返回<0;如果str1大于str2,则返回>0,如果它们相等,则返回0。”此函数用于比较字符串,而不仅仅是检查相等性。如果(在数组中($first_name,array($fn0,$fn1)){…},则执行
if会更容易
手册页参考: