首页 > Php > PHP常见的两个面试题

PHP常见的两个面试题

php面试中,有两个题目,很常见。但却很容易错。

第一题:

$a = 2;
$b = &$a;
uset($a);
echo $b;

问,会输出什么?

答案是 2 .

由此,可以衍生出来以下几种情况:

$a = 2;
$b = &$a;
uset($b);
echo $a;

这样呢?

答案还是 2 .

$a = 2;
$b = &$a;
$a = 3;
echo $b;

此时的$b输出为 3 .

$a = 2;
$b = &$a;
$b = 3;
echo $a;

这次的输出是: 3

& 在这里是“引用”的意思。这和C语言的指针引用是不一样的。在PHP里面只是 某个value对应的不同的名称而已。

举个不恰当的例子:比如你的宠物狗有个中文名 叫 “小强” ,“小强”就是你的宠物狗的 代号或者姓名。

有一天,当你的心血来潮,再给它起了个英文名叫“jack” 。OK,now,jack (这个可以看做是 小强的引用 ) 也是宠物狗了。

过了一段时间,你发现中国的狗狗嘛,干嘛要搞些洋名呢。于是,就把它的英文名给拿掉了(unset())。以后只叫他小强了。

也就是说,无论你把哪个名字拿掉了,这个狗狗都是存在的。都是你的宠物。你拿掉的(unset()的),只是名字而已。你并没有把你狗狗拿掉。

在PHP手册中,unset() 是指:销毁指定的变量。仅是变量而已。

但为什么当$a的值改变的时候,$b的值也会发生改变呢?因为这时,改变的是 “值” ,而不是 狗的姓名了。

比如说 小强 有一天出车祸了,腿断了。那jack呢?jack当然也是同样的。因为 实体 “狗狗” 发生了变化。所以,jack和小强都会发生变化。


第二题:

$a = 2;
$b = 3;
$c = &$a;
$c = 2;
 if(  ($a=5)>0   ||  ($b=$a)>0 )
 {
	$a++;
	$b++;
 }
echo $a.'-'.$b.'-'.$c;

这道题 a b c的值会是多少呢?

输出的答案就是: 6-4-6

这个第二题,延续了第一题,对于引用的测试。另外一个就是 关于 逻辑运算符” || ”

在这里,if( ($a=5)>0 || ($b=$a)>0 ) 当($a=5)>0 是真后,($b=$a)>0是不会执行到的。所以 $b的值没有发生变化。

只是在后面 $b++的时候,变化了而已。

  1. 还没有评论
评论提交中, 请稍候...

留言

可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks