关于PHP的一个面试题求解!

flycorn 发布于 2013/12/07 12:06
阅读 447
收藏 3
PHP
<?php
  $a=0;
  $b=0;
  if($a=3||$b=3){
        echo $a.'<br/>';  //输出 1
	$a++;
  	echo $a.'<br/>';  //输出 1 我就是搞不懂这里为什么不是输出2
	echo $b.'<br/>';  //输出 0
	$b++;
	echo $b.'<br/>';  //输出 1
  }
  echo $a.','.$b;   //输出 1,1



加载中
1
gnefil.nil
gnefil.nil
坑爹的php运算符优先级问题,$a=3||$b=3 相当于 $a=(3 || ($b=3)),$a变成了True,boolean型++或--都不变,echo Ture输出1,echo False没输出。关于优先级可以看看这里 http://www.laruence.com/2010/07/26/1668.html
flycorn
flycorn
谢谢大侠,总算弄明白了,原来boolean型++,--都不变。
0
铂金小狗
铂金小狗

别ABC了,好不????

请抛弃谭浩强......我是没见过谭老师....我要是见到他...我一定揍他......!~~

Jason阿坚
Jason阿坚
C的不一样
0
陨落人间
陨落人间
<?php
  $a=0;
  $b=0;
  if($a=3||$b=3){
        echo $a.'<br/>';  //输出 1
var_dump($a); //类型被强制转换了。
var_dump($b);
$a++;


  echo $a.'<br/>';  //输出 1 我就是搞不懂这里为什么不是输出2
echo $b.'<br/>';  //输出 0
$b++;
echo $b.'<br/>';  //输出 1
  }
  echo $a.','.$b;   //输出 1,1
flycorn
flycorn
这里的数据类型的确转换成布尔型了,但是是true啊,然后下面$a++=$a+1,true转换成数字变成1+1=2。求解 卡在这里了!
0
极品渣子
极品渣子

if($a=3||$b=3)

很明显,这里的问题,这是=号,而不是==或===

0
欣儿
欣儿
明显是这里if($a=3||$b=3){对值重新赋值。a变味true,即为1。而b=3只是a的判断条件,不做赋值,b还为0。而a不会根据++变化来,也是a为true,而不是数值这样
flycorn
flycorn
谢谢了,总算明白了。
0
lazyphp
lazyphp
 这题我也没理解好。。看了你们的回复,才知道原因。看来我要复习一下基础
0
qycms_cn
qycms_cn

我觉得这题难点在于
1、对运算符(=与==)的区别理解、运算符的优化级理解。
2、boolean型++,--都不变(我也不理解这个,亲手试过后,才发现确实是:boolean型++,--都不变

0
悦澜殇
悦澜殇
难道是这样么?
<?php
  $a=0;  //int
  $b=0;  // int
  if($a=3||$b=3){ // 强制类型转换 ???
        echo $a.'<br/>';  //输出 1
	$a++;
  	echo $a.'<br/>';  //输出 1 我就是搞不懂这里为什么不是输出2
	echo $b.'<br/>';  //输出 0
	$b++;
	echo $b.'<br/>';  //输出 1
  }
  echo $a.','.$b;   //输出 1,1


返回顶部
顶部