我在PHP中有这个函数来检查一个数字是1还是0,如果不是没有访问权限。这是为了在我的一个游戏中实现的轻量级安全系统,以帮助防止大多数作弊。
$number = 1;
if ($number<>0 || $number<>1){
die("nope");
}
但是,当我在上面运行此代码时,会回显nope。为什么呢?
答案 0 :(得分:3)
&lt;&gt;比较运算符与!=(不等于)相同。 ||是OR比较运算符。在上面的条件语句中,如果任一表达式不为真,则代码块将执行。从1!= 0开始,代码块将执行。
答案 1 :(得分:2)
您正在检查$number
是否大于/小于0或大于/小于1.由于1大于0,因此第一个条件为真且语句为真。所以你得到消息'nope'。
将其更改为:
if ($number <> 0 && $number <> 1){
答案 2 :(得分:2)
您的代码总是通过,它检查$ number是否为1或不为零 - 尝试正确的解决方案:
$number=1;
if (!($number==0 || $number==1)){
die("nope");
}
答案 3 :(得分:2)
你的第一个条件$number<>0
是真的。 <>
表示不等于(!=
)。 1 != 0
是真的。
所以如果条件,它总是在里面。
答案 4 :(得分:2)
当$number<>0 || $number<>1
为1时,您的条件$number
将为真,因为1不等于0.由于您使用的是||
,因此true || <anything>
会发生短路是的。
您想在此处使用&&
。检查$number
是否不等于0或1。
$number=1;
if ($number<>0 && $number<>1){
die("nope");
}
关注De Morgan's laws,你也可以这样做:
$number=1;
if (!($number==0 || $number==1)){
die("nope");
}