内容纲要
现成的结论:
1.Var_dump(“.”==0) //true 用.可以绕过==0
2.既要等于1又要等于0 // 如果是字符串,也就是a的时候,offset取值的时候会转化为整数,也就是0
1 2 3 |
$a="aaa"; $test="www"; echo $test[$a]; //输出w |
1 2 3 4 5 |
$a=".1e1";或者$a="0.9999999999999999"; $test="am0s"; if ($a=="1"&&$test[$a]=="a") { echo "ok"; } |
这个在之前的文章中提到过CTF之PHP黑魔法总结
弱类型比较运算符:
需要明白变量类型及它们的意义。例如,"42" 是一个字符串而 42 是一个整数。FALSE 是一个布尔值而 "false" 是一个字符串。
在不同类型的比较运算中object最大、其次array。当bool和null和其他类型比较时,先转换为bool,在进行false和true的比较。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php echo "array>99199------"; var_dump(array(1)>99999); echo "<br />"; echo "object>array-----"; $a = (object) ["a" => "b"]; $b = array(1); var_dump($a>$b); echo "<br />"; echo "bool&&int--------"; var_dump(true == 1111); ?> |
下图是php手册里给出的结论
比较多种类型 | |||
运算数 1 类型 | 运算数 2 类型 | 结果 | |
null 或 string | string | 将 NULL 转换为 "",进行数字或词汇比较 | |
bool 或 null | 任何其它类型 | 转换为 bool,FALSE < TRUE | |
object | object | 内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明 | |
string,resource 或number | string,resource 或number | 将字符串和资源转换成数字,按普通数学比较 | |
array | array | 具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较(见下例) | |
object | 任何其它类型 | object 总是更大 | |
array | 任何其它类型 | array 总是更大 |