1、既是0又是1的情況
$a==1 & $test[$a]=t 時
知識點1)php在處理數字時,如果數字的位數超過 16 位是可以弱等于1的,也就是
var_dump( 9999999999999999999 == 1 );//true
因為當數字位數超過 16 位時,是將該數字轉換成了數值為 1 的字符串進行處理
知識點2)在科學計數法中也有種特殊情況,0.1e1 是代表 0.1*10,而 .1e1 代表的也是 0.1*10 ,但在數組中時,由于 . 代表的是字符串,所以會于數組中變成 0 ,于 is_numeric 中有點則正常輸出為數字
// 打印數組b下標為0的數據
echo $b['.1e1'] //輸出t
2、switch代碼漏洞
當使用 switch 并且沒有使用 break 來跳出循環時,代碼是會繼續往下執行。這屬于程序員在編寫程序出現的人為漏洞,并不是語言本身的問題。
3、$a==0可用.繞過(非數字都可繞過)
如何使 $a==0 的同時 $a 又為真?
<?php
$a=$_GET['a'],
if ($a==0){echo "1";
}
if ($a) {echo "must";
}
?>