前段时间换工作,前后面试了大概两个礼拜,有十几家公司。现在把遇到的频率比较高的题目整理出来,给年后需要找工作的小伙伴参考。
在PHP 中引用的意思是:不同的名字访问同一个变量内容。
PHP地址相关的问题,一般喜欢两种形式的,一种是考察传值和传引用(具体可以参考请一篇文章PHP地址问题-传值与传引用(一))。另一种就是本篇文章说的,循环中使用引用(一般要修改数组中值,除了$k => $v形式,另一种就是&$v,感觉后一种逼格高一些)。
具体可以看下下面这个题目:
$arr = [1,2,3,4,5,6];
foreach ($arr as &$i) {
$i = $i + 10;
}
foreach ($arr as $i) {
// echo '<pre>';var_dump($array); echo "</pre>";
}
print_r($arr);
//运行结果
Array ( [0] => 11 [1] => 12 [2] => 13 [3] => 14 [4] => 15 [5] => 15 )
大部分人对前面5个值,可能没有疑惑。就不太明白为啥最后一个值还是15,这里就是$i惹的祸了。把第二次循环的$arr实时输出方便理解,单纯的想是有点难。
//运行过程中,第二个foreach循环时,$arr变化情况
array(6) {
[0]=>
int(11)
[1]=>
int(12)
[2]=>
int(13)
[3]=>
int(14)
[4]=>
int(15)
[5]=>
&int(11)
}
array(6) {
[0]=>
int(11)
[1]=>
int(12)
[2]=>
int(13)
[3]=>
int(14)
[4]=>
int(15)
[5]=>
&int(12)
}
array(6) {
[0]=>
int(11)
[1]=>
int(12)
[2]=>
int(13)
[3]=>
int(14)
[4]=>
int(15)
[5]=>
&int(13)
}
array(6) {
[0]=>
int(11)
[1]=>
int(12)
[2]=>
int(13)
[3]=>
int(14)
[4]=>
int(15)
[5]=>
&int(14)
}
array(6) {
[0]=>
int(11)
[1]=>
int(12)
[2]=>
int(13)
[3]=>
int(14)
[4]=>
int(15)
[5]=>
&int(15)
}
array(6) {
[0]=>
int(11)
[1]=>
int(12)
[2]=>
int(13)
[3]=>
int(14)
[4]=>
int(15)
[5]=>
&int(15)
}
看到这个输出就比较清楚了。
第一次循环完,$i是指向$arr最后一个值的引用。在第二次循环的时候,$i在循环遍历数组,同时在修改引用的值(数组的最后一个值)也可以理解存在:$i = &$i。
希望了解更多PHP引用相关知识可以看下知乎上的这篇文章:https://zhuanlan.zhihu.com/p/35107602