首页 > 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++的时候,变化了而已。

分类: PHP开发 标签:
  1. 2010年5月18日03:44 | #1

    这些题目考了几个知识点:
    1.变量
    2.变量的范围
    3.运算符
    4.运算符的优先级。
    5.unset函数

    看来这些被我们平时看似很简单,很基础的东西,恰恰反映了我们的基础不扎实。
    好好阅读手册势在必行!

  2. 2010年5月18日04:26 | #2

    @丽子 没说到点子上.. 这些题全是关于引用的.

  3. seacoastboy
    2010年5月18日06:32 | #3

    估计 他这样出题 。不如说考眼力的 O(∩_∩)O~

    (uset )

  4. 2011年4月9日03:11 | #4

    PHP中的引用,有点类似于Linux下的硬链接。

    最后一道题,太绕了!

  5. baiy
    2011年5月12日03:54 | #5

    $val){
    $val = &$data[$key];
    print_r($data);
    }
    ?>

  1. 本文目前尚无任何 trackbacks 和 pingbacks.