Php 包含两个isset()的IF语句
这是我的密码:Php 包含两个isset()的IF语句,php,if-statement,isset,Php,If Statement,Isset,这是我的密码: if( ( ! isset($_GET['year']) ) || ( ! isset($_GET['make']) ) || $_GET['make'] == 0 ) { echo 0; exit; } 它一直返回0。。。设置年份和品牌时,品牌不等于0 这是我正在传递的URL: 为什么会一直返回0?即使我删除了$\u GET['make']==0,它仍然返回为0。。不能有两个isset()条件吗?看起来PHP将字符串与整数相比视为true($\u GET[“
if( ( ! isset($_GET['year']) ) || ( ! isset($_GET['make']) ) || $_GET['make'] == 0 ) {
echo 0;
exit;
}
它一直返回0。。。设置年份和品牌时,品牌不等于0
这是我正在传递的URL:
为什么会一直返回0?即使我删除了
$\u GET['make']==0
,它仍然返回为0。。不能有两个isset()条件吗?看起来PHP将字符串与整数相比视为true($\u GET[“make”]==0
)
原因是,$\u GET[“make”]
被隐式转换为用于比较的int。尝试将字符串转换为int时,如果失败,将返回值0
将$\u GET['make']
与字符串“0”进行比较
@Andrew,
$\u GET['make']==0
将永远不会相同,\u POST,\u GET中的所有值都被视为字符串,如果要更改其类型,必须执行强制转换
附言:我不能评论,因为它没有声誉对不起。有什么问题吗?设置了年份(因此第一个条件为false)。设置make(第二个为false),make不等于0(第三个也为false)。所以falseNo它的意思是,如果年份未设置,则返回false。但年份已经确定,所以如果语句执行。。请看“!”只有一个true将执行代码,可能是第二个和第三个条件在逻辑上是重复的?我很困惑。你说的
即使我删除了$\u GET['make']==0,它仍然返回为0
,这表明这不是(唯一)问题。那是怎么回事?这是一个很好的观点。我理解PHP为什么也这么做。它隐式将$\u GET[“make”]
转换为int,因为它与int进行了比较。当字符串无法转换为int时,返回值0。PHP本身不会转换为整数,因为您必须进行比较。看看这个。第一行表示,如果运算符、函数或控件结构需要整型参数,值将自动转换
是,但这不会发生在_GET、\u POST try中<代码>布尔(假):而且据我所知,只有当你'0'==0
时,类型a
的转换才会发生,如果一种语言为你对同一类型的操作符进行转换,那么支持“相同”操作符是没有意义的,凯?
if (
( ! isset( $_GET['year'] ) ) ||
( ! isset( $_GET['make'] ) ) ||
$_GET['make'] == "0"
) {
echo 0;
exit;
}