PHP弱类型比较规矩

一、数值与字符串比较(这个在CTF中最常考)
当一个数值和一个字符串进行比较时,字符串会先尝试转换为数值再进行比较。转换的规则是:如果字符串以数字开头,那么就会从字符串开头提取数字部分,直到遇到非数字字符为止,然后将提取的数字部分作为数值进行比较;如果字符串不以数字开头,则转换后的数值为 0
例如:0 == "abc"结果为true,因为字符串"abc"转换为数值是 0;123 == "123abc"结果为true,因为字符串"123abc"转换为数值是 123;456 == "abc123"结果为false,因为字符串"abc123"转换为数值是 0。
二、布尔值与其他类型比较
true会被转换为 1,false会被转换为 0,然后再与其他类型进行比较。
例如:true == 1结果为true;false == 0结果为true;true == "1"结果为true,因为字符串"1"转换为数值是 1;false == ""结果为true,因为空字符串转换为数值是 0。
三、数组与其他类型比较
数组与数值、字符串、布尔值等其他类型比较时,除非数组为空,否则都为false。空数组与0、""、false比较结果都为true。
例如:[] == 0结果为true;[] == ""结果为true;[] == false结果为true;[1,2,3] == 1结果为false。
四、对象与其他类型比较
当对象与其他类型进行比较时,会尝试将对象转换为标量类型(数值、字符串、布尔值等),如果对象没有定义相应的转换方法,则通常会返回false。
例如:定义一个类class MyClass {},$obj = new MyClass();,那么$obj == 1结果为false。
NULL 与其他类型比较
NULL与数值 0、空字符串""、false比较结果都为true,但与其他非空字符串、非 0 数值、true等比较结果为false。
例如:NULL == 0结果为true;NULL == ""结果为true;NULL == false结果为true;NULL == "abc"结果为false;NULL == 1结果为false。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值