我知道,$a = true; 会先将 true 赋值给 $a,然后整个 ($a = true) 会返回赋值后的 $a 的值(即 true),但是,为什么 (!$a = true) 会返回 false,根据文档:http://php.net/manual/zh/lang... 可以查询到 ! 运算符的优先级是高于 = 运算符的优先级的,按理说执行顺序应该是:((!$a) = true) 最终返回 true 而不是 false。
希望有朋友能帮忙解答一下,谢谢~
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
文档里有这么一句:
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),因为我们坚信程度不一致的开发人员都能更好地维护代码,而深切感受到 “我不是一个人在战斗”
审题不清楚~,推荐答案已经很清楚了