几道坑人的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 相关文章推荐
PHP 地址栏信息的获取代码
Jan 07 PHP
php5.3 废弃函数小结
May 16 PHP
组合算法的PHP解答方法
Feb 04 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 PHP
PHP操作文件的一些基本函数使用示例
Nov 18 PHP
php读取mssql的ntext字段返回值为空的解决方法
Dec 30 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
Apr 27 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
PHP执行普通shell命令流程解析
Aug 24 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通过COM使用ADODB的简单例子
2006/12/31 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
PHP服务器页面间跳转实现方法
2012/08/02 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
Yii隐藏URL中index.php的方法
2016/07/12 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
2016/11/22 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
JS+HTML5 FileReader对象用法示例
2017/04/07 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python使用循环实现批量创建文件夹示例
2014/03/25 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
Django静态资源部署404问题解决方案
2020/05/11 Python
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
自学考试自我鉴定范文
2013/09/26 职场文书
技术经理的自我评价范文
2013/12/03 职场文书
清华大学自主招生自荐信
2014/01/29 职场文书
大学迎新晚会主持词
2014/03/24 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
大学学生会辞职信
2015/05/13 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书