• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP短路运算符

php 搞代码 3年前 (2022-01-23) 10次浏览 已收录 0个评论

先看一段代码

$a = 5; $b = 20;if ($a = 10 || $b = 7) {    $a++;    $b++;}echo $a,"\n","",$b; //1 21

刚开始接触可能一眼看过去很容易说出最后的输出是5 20 但是仔细看后()里的条件表达式是赋值操作,所以应该输出11 21.但是计算机和我们开了一个并不好笑的玩笑。她妹的,最后竟然输出的是1 21。

计算机的思路和人脑的思路是有区别的,在编程的时候必须了解计算机的思维模式:机械式的思维模式。我们人在判断这个逻辑表达式的时候会跳跃性的先对$a和$b赋值,然后再做与运算,这样做虽然不影响逻辑运算的结果,但是也会产生上面这种副作用。事实上,计算机为了节省资源,采取了短路运算的方式解释这个逻辑表达式。当他发现与运算符的前一个数值(例如$a)是false时,他就会判断这个与运算表达式的运算结果是false,然后跳出这个逻辑运算表达式,继续执行下面的程序,而不会执行表达式剩下的语句。

至于这里为什么$a的值是1? 是因为在条件表达式的时候$a = 10的操作的时候php会把$a转换成boolean。上面的例子中$a = 10即转换成了true.所以在{}中的$a++ 是不能进行加法运算的。但是如果花括号中的$a++换成$a = $a + 1 那么此时就可以进行数值运算了。

短路运算的精髓就是
逻辑与(&&)->检查运算符第一个表达式是否为false,如果false直接返回false,后续的表达式直接忽略。
逻辑或(||)->检查运算符第一个表达式是否为true,如果是true直接返回true,后续表达式直接忽略。
PS:&&的优先级高于and、||的优先级高于or、等号(=)的优先级高于and和or

补充

php<?php// 下面的 foo() 不会被调用,因为它们被运算符“短路”了。$a = (false && foo());$b = (true  || foo());$c = (false and foo());$d = (true  or  foo());// "||" 的优先级比 "or" 高$e = false || true; // <strong style="color:transparent">9来源gaodai#ma#com搞@代~码$网</strong>搞gaodaima代码$e 被赋值为 (false || true),结果为 true$f = false or true; // $f 被赋值为 false [Altair注:"=" 的优先级比 "or" 高]var_dump($e, $f);// "&&" 的优先级比 "and" 高$g = true && false; // $g 被赋值为 (true && false),结果为 false$h = true and false; // $h 被赋值为 true [Altair注:"=" 的优先级比 "and" 高]var_dump($g, $h);?>//以上例程的输出类似于:bool(true)bool(false)bool(false)bool(true)

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP短路运算符
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址