关于 if (!$a = true) 的判断结果的问题?

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

阅读 5k
3 个回答

文档里有这么一句:
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),因为我们坚信程度不一致的开发人员都能更好地维护代码,而深切感受到 “我不是一个人在战斗”

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题