几道坑人的PHP面试题 试试看看你会不会也中招


Posted in PHP onAugust 19, 2014

这几道题是在德问上看到的,感觉挺有意思,拿来给大家分享其中的陷阱,看看你会不会掉入其中。

第一题

$arr = array(0=>1,"aa"=>2, 3, 4);

 

foreach($arr as $key=>$val){

    print($key == "aa" ? 5 : $val);

}

输出结果是多少?如果的答案是1534就掉入陷阱了。
先看看这个数组最终形成的结构:
Array

(

    [0] => 1

    [aa] => 2

    [1] => 3

    [2] => 4

)

然后遍历每一个元素的key看等不等于aa,等于就用5替代。当我告诉你答案是5534的时候,你会不会有点惊讶!难道0等于"aa"吗?是的,0就等于"aa",这道题重点就考你这个。在PHP中两个值进行逻辑判断时,如果两个值的类型不一致PHP会自动把右边的值转换到左边的类型,然后再进行判断。因此"aa"转换整形等于0,自然也就等于左边的0了。你可以使用全等于避免这种该情况,也就是如果你写成:
print($key === "aa" ? 5 : $val);

那么答案就是1534了。

第二题

$i='11';

printf("%d\n",printf("%d",printf("%d",$i)));

输出结果是多少?如果你回答是11,或者111111就掉入陷阱了。
先了解printf这个函数,printf不仅是打印函数,它还有返回值。重点就在这
var_dump(printf("%d",$i));

你猜猜上面的结果是啥?先是printf打印变量本身11,然后printf会返回一个变量字符串长度的值,11有两个字符,于是返回2,于是上面语句的执行结果等于:
11int(2)

清楚了这一点以后,再回过来看上面的试题,按照优先级,限制性深度printf函数,打印11,返回2。接着到第二级printf函数,打印2,返回1。最后到第三层,直接打印1,所以执行结果是 1121。

第三题

$a = 3;

$b = 5;

if($a = 5 || $b = 7) {

    $a++;

    $b++;

}

echo $a . " " . $b;

执行结果是多少?如果你回答 6 8 or 4 6 or  6 6,那你就掉入陷阱了。
第一个陷阱,认为答案等于 4 6 。估计你粗心把  $a = 5 ||  $b = 7  看成 $a == 5 ||  $b == 7 ,这是新手常犯的错误。

第二个陷阱,认为答案等于 6 8。 你识破了  $a = 5 ||  $b = 7 这个骗局,但你没有注意到,逻辑或里只要依次执行直到某个表达式结果为true,表达式后边的就不再执行,$a = 5 返回true,后边的$b=7就不执行了。
第三个陷阱,认为答案等于 6 6。 OK,你识破了 逻辑或的规则,于是$a=5执行,$b=7不执行,但是你没有考虑到这里是逻辑表达式,返回给$a的值是要转换为布尔值的。这样看。

所以经过以上三个陷阱,你应该知道答案是多少了,其实 $a等于true以后,echo $a 输出就是1 ,$b值不变,结果就是 1 6 。

第四题

$count = 5;

function get_count() {

    static $count = 0;

    return $count++;

}

++$count;

get_count();

echo get_count();

执行结果是多少?如果你回答 2 ,恭喜,你掉入陷阱了。
其实这道题主要考两点,第一点是static静态类型。这种的值永远都是静态的,第一次调用声明等于0,并且自增等于1。第二次调用,1再自增就等于2。但其实这里还有一道陷阱,那就是++a与a++的区别,前++是先自增,后++是先返回值再自增,所以结果等于 1。

第五题

$a = count ("567")  + count(null) + count(false);

echo $a;

如果你回答 3 or 1,恭喜,掉入陷阱了。
因为count(null)等于0,false也算一个值。所以count(false)等于1。

PHP 相关文章推荐
深入了解php4(2)--重访过去
Oct 09 PHP
将数组写入txt文件 var_export
Apr 21 PHP
fetchAll()与mysql_fetch_array()的区别详解
Jun 05 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
PHP之autoload运行机制实例分析
Aug 28 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
PHP高精确度运算BC函数库实例详解
Aug 15 PHP
ThinkPHP5 验证器的具体使用
May 31 PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 PHP
PHP判断是否是json字符串
Apr 01 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
Aug 19 #PHP
php解析json数据实例
Aug 19 #PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 #PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 #PHP
php中用memcached实现页面防刷新功能
Aug 19 #PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 #PHP
php中多维数组按指定value排序的实现代码
Aug 19 #PHP
You might like
用PHP制作静态网站的模板框架(一)
2006/10/09 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
php操作access数据库的方法详解
2017/02/22 PHP
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
Python实现合并字典的方法
2015/07/07 Python
Python按行读取文件的简单实现方法
2016/06/22 Python
Python遍历pandas数据方法总结
2018/02/09 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
python实现人工蜂群算法
2020/09/18 Python
用python制作个视频下载器
2021/02/01 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
《我要的是葫芦》教学反思
2014/02/23 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
2016高三毕业赠言寄语
2015/12/04 职场文书
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS
CentOS MySql8 远程连接实战
2022/04/19 MySQL