为什么这个php字符串比较工作?

时间:2012-12-30 13:39:38

标签: 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)或不是(fn1)而不是(sn)然后打印“Hello Joe Bloggs”

当然它应该为 Joe Bloggs的所有内容显示“hello Joe Bloggs”,但事实并非如此:它将显示上述消息iff($ first_name ==“joe”| |“约瑟夫”)&amp;&amp; $ last_name ==“bloggs”。

有人可以解读这个吗?

2 个答案:

答案 0 :(得分:1)

看看你的括号

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

错误是||&&的逻辑。如果第一次检查为真,则其余部分将被忽略

答案 1 :(得分:0)

在第一次比较结果为TRUE后,不需要“或”条件。当然,我们必须假设某个地方有$ first_name的定义......