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;
}