在正式介绍前先抛出一段代码:
<?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