在正式介绍前先抛出一段代码:
<?php
//输入的密码
$password = empty($_POST['password']) ? 0 : $_POST['password'];
//设置的密码
$server_password = 'a123456';
if ($server_password == $password)
{
echo '密码正确';
}
else
{
echo '密码错误';
}
我本来的想法是用户不输入密码直接提交就当用户输入的是0,但是结果另外意外了,竟然输出密码正确。难道0还能等于a123456 ?那我们验证下:
<?php
var_dump((0 == 'a123456')); //输出true
经过一番了解后才知道在php中如果字符串和数字进行对比,字符串将会被强制转换为int类型和数字对比,例如上面的代码等同于下面的代码:
0 == intval('a123456')
因为a123456无法转换为int型因此变为了0,如果字符串是'123456'那就不影响了,intval后依然是123456