php if<=0,不要用n==0作为if()方法的判断依据

本文记录了一种常见的编程错误,即在条件判断中使用0可能导致的逻辑问题。作者通过一个登录功能的示例说明,当使用0作为判断用户类型的标志时,由于0被视为false,导致普通用户在登录时被错误地识别为父子管理员,从而引发密码验证失败的问题。解决方案是避免直接使用0作为判断条件,而是采用更明确的表达方式。
摘要由CSDN通过智能技术生成

不要用n==0作为if()方法的判断依据

一直犯这个错误好多次,这次记下来,用0作为判断的条件会出现很多问题,因为在计算机语言中0等价于false等价于空,所以如果我们要用广义的数字来做判断时,用0的话只能用>或者

同一个方法作为三种登录的公用方法,分别为普通会员登录,父级管理和资管理登录,当时用$is_parent来作为判断父子管理员,结果

走到result时,我用普通用户登录,结果满足了 ($is_parent == 0 && $son_result->password !== md5(Yii::app()->params[‘key’] . $this->password)这个条件,导致普通用户登录一直报密码错误,因为普通用户的$is_parent是null,所以判断将他们都视为了false,当然2条件是肯定满足的,就一直报错了,记下别再犯这种错误。

//判断登录用户类型

if($_POST[‘rdoLoginType’] === ‘memberLogin’){

$result = User::model()->find(‘username=:name’,array(‘:name’=>$this->username));

}

if($_POST[‘rdoLoginType’] === ‘agentLogin’){

//miracle修改子账户登录

$son_result = Agentteam::model()->find(‘username=:name’,array(‘:name’=>$this->username));

if($son_result === null){

$result = Agent::model()->find(‘username=:name’,array(‘:name’=>$this->username));

$is_parent = 1;

}else{

$result = Agent::model()->find(‘id=:id’,array(‘:id’=>$son_result->agent_id));

$is_parent = 0;

}

}

if($result === null){

$this->errorCode = self::ERROR_USERNAME_INVALID;

return 1;

}elseif (($is_parent == 1 && $result->password !== md5(Yii::app()->params[‘key’] . $this->password)) || ($is_parent == 0 && $son_result->password !== md5(Yii::app()->params[‘key’] . $this->password))) {

$this->errorCode = self::ERROR_PASSWORD_INVALID;

return 2;

}

标签:==, ===

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值