> php教程 > PHP源码 > 一道简单的PHP笔试题(进阶必备)

一道简单的PHP笔试题(进阶必备)

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-06-08 17:21:24
원래의
1043명이 탐색했습니다.

下文是一道简单的PHP笔试题(进阶必备)了,如果你准备去面试的话不防进入来参考这道笔试题吧。

<script>ec(2);</script>

次,一个前辈发了一道PHP笔试给我,题目大致如下

 代码如下 复制代码
$arr = array('1','2','3');
 
foreach($arr as $key=>&$val){}
 
foreach($arr as $key=>$val){}
 
var_dump($arr);

问答案是什么?

看完我就懵了?根本不知道问题的考点在那里,看完两个foreach的区别在一个是取了地址,一个没有取地址,,这样会影响结果吗?

结果输出的结果居然是

 代码如下 复制代码

array(
  0 => string '1' (length=1)
  1 => string '2' (length=1)
  2 => &string '2' (length=1)
)

表示打印出来的数据为什么会这样?“3”去哪儿了?
造成这样的原因在于:&取地址符合。

 

用这种方式来说明foreach对数组的读取,比较直观。

然后循环就是指针的移动读取,而且由于是&取值,则直接读的是地址而是不简单的赋值。所以当第一个循环结束后。$val跟$arr[2]指的是同一个地址,所以$val值如果改变了,$arr['2']值也跟着改变了。

如果,你运行一下如下代码

 代码如下 复制代码
$arr = array('1','2','3');
 
foreach($arr as $key=>&$val){}
 
foreach($arr as $key=>$val){
 var_dump($arr);
}
var_dump($arr);

你就能看到变化的过程。和得到之前结果的原因

 

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿