踩的 php 基础的坑

字符串和数字比对

这个坑是在做微信登录的时候遇到的,因为客户端要做一个给苹果的审核账号,那么和客户端约定好了,当客户端传code=1的时候,就登录审核账号,但是在实际过程中,有一定几率登录到审核账号

$code = request('code');
if($code == 1){
    //登录审核账号
}
//登录正式账号

当客户端传的code是001xxxxxx这类字符串的时候,就会登录到审核账号

PHP常见不同类型(标量类型)数据之间的比较规律

  • 如果比较的数据中,有布尔值,转为布尔值比较,布尔值只有一个规律 true > false
  • 否则 , 如果有数字值,就转为数字值比较:这就是常规比较.
  • 否则 , 如果两边都是"纯数字字符串" ,转为数字比较
  • 否则 , 就按照字符串比较

很明显,我是有数字值,所以就会把字符串"001xxxxx"转换为数字和1比较

// 值为1
(int)'001xxxxx'

这样一看的话,也就不难解释说,当正常用的code是以1,01,001,00...1开头的code登录必定会登录到审核账号

解决办法

改为全等,这里就需要客户端传的1也必须是整形

$code = request('code');
if($code === 1){
    //登录审核账号
}
//登录正式账号