几道坑人的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判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
关于PHP session 存储方式的详细介绍
Jun 25 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
Sep 16 PHP
PHP安装threads多线程扩展基础教程
Nov 17 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
May 15 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
Aug 11 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
Jan 21 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 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
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
php Session无效分析资料整理
2016/11/29 PHP
php生出随机字符串
2017/07/06 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
JavaScript中的函数模式详解
2015/02/11 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
解决element UI 自定义传参的问题
2018/08/22 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
启动Atom并运行python文件的步骤
2018/11/09 Python
Python中的 enum 模块源码详析
2019/01/09 Python
python是否适合网页编程详解
2019/10/04 Python
python实现人脸签到系统
2020/04/13 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
python用分数表示矩阵的方法实例
2021/01/11 Python
python实现学生信息管理系统源码
2021/02/22 Python
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
几个Linux面试题笔试题
2016/08/01 面试题
教师批评与自我批评心得体会
2014/10/16 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
sass 常用备忘案例详解
2021/09/15 HTML / CSS
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android