我知道,$a = true; 会先将 true 赋值给 $a,然后整个 ($a = true) 会返回赋值后的 $a 的值(即 true),但是,为什么 (!$a = true) 会返回 false,根据文档:http://php.net/manual/zh/lang... 可以查询到 ! 运算符的优先级是高于 = 运算符的优先级的,按理说执行顺序应该是:((!$a) = true) 最终返回 true 而不是 false。
希望有朋友能帮忙解答一下,谢谢~
我知道,$a = true; 会先将 true 赋值给 $a,然后整个 ($a = true) 会返回赋值后的 $a 的值(即 true),但是,为什么 (!$a = true) 会返回 false,根据文档:http://php.net/manual/zh/lang... 可以查询到 ! 运算符的优先级是高于 = 运算符的优先级的,按理说执行顺序应该是:((!$a) = true) 最终返回 true 而不是 false。
希望有朋友能帮忙解答一下,谢谢~
这就好比 $a = true; 和 !$a = true 的结果都是 $a 被赋值为 true 一样,因为 !$a 后再被赋值为 true 是神马意思呢?于是 PHP 的底层索性就认为你这是在执行赋值操作($a = true),然后再进行逻辑判断
抛开问题的结果,试问:
平时谁会这么写代码呢?
难道只是为了秀代码而忽略代码的可读性吗?
或者心态偏激一点,想给后面维护的人挖个坑??
反观我们自己,譬如当我们写三元运算(A ? A : B)的时候,除了如果 A、B 是表达式的话会加括号外,我们并不会这样使用(A?:B),因为我们坚信程度不一致的开发人员都能更好地维护代码,而深切感受到 “我不是一个人在战斗”
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
2 回答783 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.3k 阅读
1 回答696 阅读✓ 已解决
文档里有这么一句:
Note:
尽管 = 比其它大多数的运算符的优先级低,PHP 仍旧允许类似如下的表达式:if (!$a = foo()),在此例中 foo() 的返回值被赋给了 $a。
其他地方也有相关解释:http://www.phpchina.com/threa...