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

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

第一题

复制代码 代码如下:

$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。

时间: 2024-08-27 09:22:35

几道坑人的PHP面试题 试试看看你会不会也中招_php实例的相关文章

用java编写代码,实现将多套试题,读入mysql数据库中

问题描述 用java编写代码,实现将多套试题,读入mysql数据库中 我想做一个自动生成试卷的系统,供教师使用,想把多套试卷录入数据库,用java编写代码,实现将多套试题,读入mysql数据库中 解决方案 自动生成试卷,需要做一个题库吧.通过题库的随机算法生成新的试卷 解决方案二: 是将一套样题的卷子拆解成若干道题目吗?首先要实现拆分啊,好像有点难...不如上网上直接找题目来的快 解决方案三: 是的,需要做题库,试题录入题库.试卷从中随机取出.. 解决方案四: 嗯,我已经将几套试题按题型录入数据

sql-一道关于数据库的面试题,看着很简单,但我就是不会写。求指导

问题描述 一道关于数据库的面试题,看着很简单,但我就是不会写.求指导 解决方案 oracle的http://www.cnblogs.com/luluping/archive/2012/07/26/2610705.html 解决方案二: 这就是竖表变横表,用case语法汇总,或者用PIVOT(sqlserver方法) 解决方案三: SQL行转列汇总 解决方案四: 本人菜鸟一枚.以下是我想到的一种方法: ---行转列 create table tb( name varchar(10), subjec

33道php常见面试题及答案_php实例

1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中:而链接到当前页面的URL记录在预定义变量(2)中. 复制代码 代码如下: 答:echo $_SERVER['PHP_SELF']; echo $_SERVER["HTTP_REFERER"]; 2.执行程序段将输出(3). 复制代码 代码如下: 答:0 3.在HTTP 1.0中,状态码 401 的含义是(4):如果返回"找不到文件"的提示,则可用 header 函数,其语句为(5).

PHP经典面试题之设计模式(经常遇到)_php实例

设计模式在面试过程中经常会提到,有时候还会让我们举例说明各种设计模式的应用场景. 使用设计模式可以减轻我们的工作量,优化我们的代码. 设计模式非常的多,这里介绍单例模式,工厂模式,组合模式,策略模式4种模式 如果有代码有什么问题或者有更好的方式请告知,谢谢!!!!! /** * 单例模式 * @author YangYang <1812271619@qq.com> * 可以想成在一次http请求中只产生该类的一个对象(即只new classname一次) * 经典的例子是数据库连接(redis

PHP微信开发之有道翻译_php实例

首先,你需要去有道翻译API官网去申请key:http://fanyi.youdao.com/openapi?path=data-mode 得到key之后,就可以开始从该API获得查询的数据了(返回json还是XML,看个人喜好,这里我用的是json)  下面我直接把responseMsg方法里,实现翻译的代码给出.如果你第一次接触微信API,不懂这个方法是干什么的,请去点击PHP微信开发之文本自动回复 </pre><a target=_blank href="http://b

PHP面试题之文件目录操作_php实例

这道题其实并不难,考点主要在函数substr() strrchr()  array_pop()  strrpos() strpos() strrev() explode()  pathinfo(). 废话不多说了,直接给大家贴代码了. 获取文件后缀,遍历目录层次 /** * 5种方式获取文件后缀名 * 这道题其实就是考函数substr() strrchr() array_pop() strrpos() strpos() strrev() explode() pathinfo() * @param

PHP的文件操作与算法实现的面试题示例_php实例

操作文件 1.使用5种以上的方式获取一个文件的扩展名 要求: dir/upload.image.jpg, 找出.jpg或者jpg <?php /** * 五种方式获取指定路径的文件扩展名 */ $str = "dir/upload.image.jpg"; function one ($str) { $arr = explode('.', $str); $count = count($arr); return $arr[$count - 1]; } function two ($s

有道搜索和IP138的IP的API接口(PHP应用)_php实例

复制代码 代码如下: <?php $myip = $_SERVER["REMOTE_ADDR"]; //ip138 http://wap.ip138.com/ip.asp?ip=www.myolnet.com //youdao http://www.youdao.com/smartresult-xml/search.s?type=ip&q=ip $ipinfo=fcontents("http://www.youdao.com/smartresult-xml/se

用PHP解决的一个栈的面试题_php实例

前言 遇到一道面试题,题目大概意思如下: 使用两个普通栈实现一个特殊栈,使得pop.push.min三个函数的都是复杂度为O(1)的操作,min函数是获得当前栈的最小值. 初步想法 1.要实现min函数为(1)操作,当时第一想法是事先需要算好当前最小值,于是会想到用一个值来保存当前栈中最小值元素,然后push和pop操作的时候维护这个值.这样min,push都是O(1)了,但pop可不是,如果当前弹出的是最小值,需要从新寻找当前元素的最小值,这个就不是o(1)了. 2.而且上面方法没有用到另外一