[转] PHP常见的两个面试题

转载自: http://digdeeply.info/archives/0207573.html

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

第一题:

1$a = 2;
2$b = &$a;
3uset($a);
4echo $b;

问,会输出什么?

 

答案是 2 .

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

1$a = 2;
2$b = &$a;
3uset($b);
4echo $a;

这样呢?

答案还是 2 .

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

此时的$b输出为 3 .

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

这次的输出是: 3

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

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

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

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

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

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

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

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


第二题:

 

1$a = 2;
2$b = 3;
3$c = &$a;
4$c = 2;
5 if(  ($a=5)>0   ||  ($b=$a)>0 )
6 {
7    $a++;
8    $b++;
9 }
10echo $a.'-'.$b.'-'.$c;

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

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

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

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

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

转载于:https://www.cnblogs.com/DavidYan/articles/2532400.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值