php - 关于 if (!$a = true) 的判断结果的问题?
ringa_lee
ringa_lee 2017-04-10 18:03:32
[PHP讨论组]

我知道,$a = true; 会先将 true 赋值给 $a,然后整个 ($a = true) 会返回赋值后的 $a 的值(即 true),但是,为什么 (!$a = true) 会返回 false,根据文档:http://php.net/manual/zh/lang... 可以查询到 ! 运算符的优先级是高于 = 运算符的优先级的,按理说执行顺序应该是:((!$a) = true) 最终返回 true 而不是 false。
希望有朋友能帮忙解答一下,谢谢~

ringa_lee
ringa_lee

ringa_lee

全部回复(3)
PHP中文网

文档里有这么一句:
Note:
尽管 = 比其它大多数的运算符的优先级低,PHP 仍旧允许类似如下的表达式:if (!$a = foo()),在此例中 foo() 的返回值被赋给了 $a。
其他地方也有相关解释:http://www.phpchina.com/threa...

阿神

这就好比 $a = true; 和 !$a = true 的结果都是 $a 被赋值为 true 一样,因为 !$a 后再被赋值为 true 是神马意思呢?于是 PHP 的底层索性就认为你这是在执行赋值操作($a = true),然后再进行逻辑判断

抛开问题的结果,试问:

平时谁会这么写代码呢?
难道只是为了秀代码而忽略代码的可读性吗?
或者心态偏激一点,想给后面维护的人挖个坑??

反观我们自己,譬如当我们写三元运算(A ? A : B)的时候,除了如果 A、B 是表达式的话会加括号外,我们并不会这样使用(A?:B),因为我们坚信程度不一致的开发人员都能更好地维护代码,而深切感受到 “我不是一个人在战斗”

PHPz

审题不清楚~,推荐答案已经很清楚了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号