一道PHP面试题

<来自 cnmm22:http://blog.csdn.net/cnmm22/article/details/44810929>


       $a=0;

       $b=0;

       If($a=3||$b=3){

              $a++; 

              $b++;

       }

       Echo$a.”,”.$b;  

写出运行结果。

结果是1,1.

知识点1:if里的运算顺序。实际上顺序是,If($a=3||$b=3){  = If($a=(3||$b=3)){     因为|| 的优先级会大于赋值符号。

知识点2:|| 短路功能,|| 这个叫短路或,(3||$b=3)等于多少?等于1,因为(3||$b=3)的意思是3是不是真?是真,|| 后面的赋值运算$b=3 就不会再计算了,那最后,b还是0,因为$b=3根本没执行,而(3||$b=3)=真。

知识点3:在If($a=3||$b=3){ 之后a等于多少?上面说了,(3||$b=3)=真,那a就等于真。在PHP里,真就等于1,a就等于1。顺带注意,在PHP里真是1,假是多少?假不是0,而是空,啥都没有。

所以结果,a++ =1,b++=1。

那 


       $a=0;

       $b=0;

       If($a=3|$b=3){

              $a++; 

              $b++;

       }

       Echo$a.”,”.$b;  

运行结果又是多少?


答案是4,4。

这里要注意一个知识点,或 和 短路或。 |  是或,而|| 是短路或,(3|$b=3)等于多少?等于3,因为,首先 或会让后面 $b=3继续运算,所以,b就等于3了,另外,或是位运算,所以,(3|$b=3)=3,所以a=3。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。