分享一个关于 IF 判断执行的顺序

分享 · forecho · 于 1年前 发布 · 750 次阅读

我经常喜欢这样写判断,屡试不爽

if ($fans = Fans::findOne(['member_name' => $model['mobile']])) {
    // 可以使用 $fans
    
}

直到遇到这个坑:

if ($fans = Fans::findOne(['member_name' => $model['mobile']]) && !empty($model['nickname'])) {
    // $fans 为 true
    
}

结果 $fans 打印出来是 true,这才反应过来,可能是 PHP 执行顺序有关系。

改成

if (($fans = Fans::findOne(['member_name' => $model['mobile']])) && !empty($model['nickname'])) {
    // 可以使用 $fans
    
}

正常!

本文由 forecho 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

共收到 2 条回复 PHP基础
forsona#110个月前 1 个赞

其实是因为,&&的优先级会比赋值号高,所以←_← 如果你想保持风格(不加括号强行加权限),可以使用and替换&&,因为and和&&的唯一区别在于,and优先级比赋值号低!!! (๑• . •๑)这也许是php的一个bug,至少目前这个规则是不会变的

NingerJohn#21个月前 0 个赞

第一段写法,我都没用过。学习一下。谢谢分享遇到的

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册