为什么这个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会更容易
手册页参考: