<code>$a=3; $b=6; $c=1; if($a=5||$b=7 && $c=10){ var_dump($a, $b,$c);//bool(true) int(6) int(1) $a++; $b++; } var_dump($a, $b,$c);//bool(true) int(7) int(1) </code>
请问为什么会这样输出?
回复内容:
<code>$a=3; $b=6; $c=1; if($a=5||$b=7 && $c=10){ var_dump($a, $b,$c);//bool(true) int(6) int(1) $a++; $b++; } var_dump($a, $b,$c);//bool(true) int(7) int(1) </code>
请问为什么会这样输出?
虽然你的这个判断写的奇奇怪怪的,不过我想应该是故意的吧,应该不是书写BUG。
这个并不是PHP的BUG,而是你自己没有好好理解运算符的优先级的问题,建议看看这个:
- 运算符优先级
- 逻辑运算符
把你的那个判断加上括号,那么你可以这么理解这个逻辑判断
<code>$a = ( 5 || ( ( $b = 7 ) && ( $c = 10 ) ) ) </code>
你可以把括号加上放到程序中测试,结果也还是一样的。从上面我们就可以看出,由于=
的优先级是最低的,所以先执行了( 5 || ( ( $b = 7 ) && ( $c = 10 ) ) )
。由于||
和&&
的操作符是同级的,所以从左到右进行操作,5
这个数字被程序判断为true
。至于为什么可以看手册:转换为布尔值
根据或
操作原则。二者中只要有一者判断为true
则立即结束判断,所以或
操作后面的都不执行了。最后将true
赋值给$a
变量。这就是为什么只有$a
变量的值变了,而$b
和$c
没变的原因。
你可以把逻辑判断改成这样:
<code>$a=0 || $b=7 && $c=10 </code>
看看结果是什么?
由于0
被程序认定为false
,所以或操作得以继续执行。或操作的右边是与操作,由于是两个赋值操作,所以是true
,fase or true
的值也是true
,所以$a=true
,$b=7
,$c=10
另外,增加括号可以提高优先级,如果要达到复制的目的,我们可以这样做
<code>($a=0) || ($b=7) && ($c=10) //可以试试($a=5) || ($b=7) && ($c=10) </code>
补充:
看到程序主体,忘记看下面的++
了,其实下面还有一个需要我们注意的就是$a++
这个操作,++
是递增操作,但是为什么得到的结果还是true
呢?通过查阅手册,我们能发现,虽然很短,但是这句话对我们的帮助非常之大:
递增或递减布尔值没有效果。 —— 递增/递减运算符
至此,程序的真相大白于天下了。至于为什么PHP会做这样的设定,可能是因为PHP是用C编写的原因(个人臆测,不可信)。
所以程序告诉我们一件事,所想并非所得,要善于怀疑自己。以上!
if($a=5||$b=7 && $c=10)
你这个判断有问题,判断相等用的是==

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

记事本++7.3.1
好用且免费的代码编辑器

Atom编辑器mac版下载
最流行的的开源编辑器