php面试中的问题,十个值得深思的PHP面试问题

十个值得深思的PHP面试问题

过来人在以往的面试中总结的10个值得深思的 PHP 面试问题,希望对你现在的面试有用,少走弯路,更多内容请关注应届毕业生网!

9c09d1611f7a0d1b2c11df67fba3f961.png

Q1

第一个问题关于弱类型

$str1 = 'yabadabadoo';

$str2 = 'yaba';

if (strpos($str1,$str2)) {

echo "/"" . $str1 . "/" contains /"" . $str2 . "/"";

} else {

echo "/"" . $str1 . "/" does not contain /"" . $str2 . "/"";

}

正确运行的输出结果:

"yabadabadoo" does not contain "yaba"

strpos是返回字符串str2在str1的位置,没有找到则返回false然而实际上这次返回了0而在if语句中0也被当作false,所以我们需要对false做类型判断,正确的代码如下:

$str1 = 'yabadabadoo';

$str2 = 'yaba';

if (strpos($str1,$str2) !== false) {

echo "/"" . $str1 . "/" contains /"" . $str2 . "/"";

} else {

echo "/"" . $str1 . "/" does not contain /"" . $str2 . "/"";

}

需要注意的是我们使用了!==,在php 和 JS中= !相对== 更为严格需要要求数据类型一致。

Q2

下面的输出结果会是怎样?

$x = 5;

echo $x;

echo "

";

echo $x+++$x++;

echo "

";

echo $x;

echo "

";

echo $x---$x--;

echo "

";

echo $x;

实际运行结果是

5

11

7

1

5

关于 $x++ 和 $x–这个问题其实非常容易遇见,我们只需记住$x++使用最近的值,然后才自增。

运算符的优先级,++ 是明显高于 +,因此先执行++ 再执行 + 。关于运算符的优先级,有的时候我们真的可以通过括号来让我们的程序更让人直观的了解,毕竟代码不光是用于执行的,有的时候或许团队的可读性也是提高效率的一种。

Q3

关于变量的引用;

$a = '1';

$b = &$a;

$b = "2$b";

请问 $a 和 $b的值各位多少

部分第一时间会想到 $a=’1′ $b=’21′,仔细一看 $b=&$a,这里$b是变量$a的引用而不是直接 赋值。

Q4

下面是true还是false

var_dump(0123 == 123);

var_dump('0123' == 123);

var_dump('0123' === 123);

var_dump(0123 == 123);// false,PHP会默认把0123当作8进制来处理,实际转化为10进制就是83,显然这不是相等的。

var_dump(’0123′ == 123);// true这里php会非常有趣的将’0123′转换成一个数字而且默认去掉了前面的0也就是123==123

var_dump(’0123′ === 123);// false很显然上面的.问题已经说过了数字和字符串类型不一致。

Q5

下面的代码有什么问题吗?输出会是什么,怎样修复它

$referenceTable = array();

$referenceTable['val1'] = array(1, 2);

$referenceTable['val2'] = 3;

$referenceTable['val3'] = array(4, 5);

$testArray = array();

$testArray = array_merge($testArray, $referenceTable['val1']);

var_dump($testArray);

$testArray = array_merge($testArray, $referenceTable['val2']);

var_dump($testArray);

$testArray = array_merge($testArray, $referenceTable['val3']);

var_dump($testArray);

实际输出如下:

array(2) { [0]=> int(1) [1]=> int(2) }

NULL

NULL

运行的时候你或许还能看到下面的警告

Warning: array_merge(): Argument #2 is not an array

Warning: array_merge(): Argument #1 is not an array

array_merge需要传入的参数都是数组,如果不是,则会返回null。 你可以这样修改

$testArray = array_merge($testArray, (array)$referenceTable['val1']);

var_dump($testArray);

$testArray = array_merge($testArray, (array)$referenceTable['val2']);

var_dump($testArray);

$testArray = array_merge($testArray, (array)$referenceTable['val3']);

var_dump($testArray);

Q6

$x应该是输出什么?

$x = true and false;

var_dump($x);

部分同学或许会第一时间想到false,实际上这里依旧是强调运算符的优先级,= 会比 and级别高点,因此等同下面的代码

$x = true;

true and false

答案显而易见。

Q7

经过下面的运算 $x的值应该是多少?

$x = 3 + "15%" + "$25"

答案是18,PHP是会根据上下文实现类型的自动转换

上面的代码我们可以这样理解,如果我们在与字符串进行数学运算,实际php会尽可能将字符串中的数组进行转换,如果是数字开头的话则转换成改数字比如”15%”会变成15,如果不是数字开头则会变成0; 上面的运算类似下面 :

$x = 3 + 15 + 0

Q8

运行下面的代码,$text 的值是多少?strlen($text)又会返回什么结果?

$text = 'John ';

$text[10] = 'Doe';

上面代码执行完毕后 $text = “John D”(John后面会有连续的5个空格) strlen($text)会返回11

$text[10] = “Doe”给某个字符串具体的某个位置具体字符时候,实际只会把D赋给$text. 虽然$text才开始只有5个自负长度,但是php会默认填充空格。这和别的语言有些差别。

Q9

下面的输出结果会是什么

$v = 1;

$m = 2;

$l = 3;

if( $l > $m > $v){

echo "yes";

}else{

echo "no";

}

实际的输出是”no”,只要仔细分析就不难得出

$l>$m 会转换成1 ,则这个时候再和$m比较。

Q10

执行下面代码$x会变成什么值呢?

$x = NULL;

if ('0xFF' == 255) {

$x = (int)'0xFF';

}

实际的运行结果是$x=0而不是255.

首先’oxFF’ == 255我们好判断,会进行转换将16进制数字转换成10进制数字,0xff -> 255.

PHP使用is_numeric_string 判断字符串是否包含十六进制数字然后进行转换。

【十个值得深思的PHP面试问题】相关文章:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android中ExpandableListView控件基本使用

本文採用一个Demo来展示Android中ExpandableListView控件的使用&#xff0c;如怎样在组/子ListView中绑定数据源。直接上代码例如以下&#xff1a; 程序结构图&#xff1a; layout文件夹下的 main.xml 文件源代码例如以下&#xff1a; <?xml version"1.0" encodi…

武林外史java游戏,武林外史_网络游戏专区_腾讯游戏频道

1 、武师用防御工具1) 武卫类> 用土布制作的防护工具。阶段图片名称说明1武威带所需功力值所需力量所需技艺所需体力所需智能所需敏捷性防御力防御成功率8013013021 %武威甲所需功力值所需力量所需技艺所需体力所需智能所需敏捷性防御力防御成功率4160150021 %武威长裤所需功…

简单实现KeyChain实例

目录结构如下&#xff1a; AppDelegate.m 1 //2 // AppDelegate.m3 // KeyChain4 //5 // Created by apple on 14-12-26.6 // Copyright (c) 2014年 ll. All rights reserved.7 //8 9 #import "AppDelegate.h" 10 11 interface AppDelegate () 12 13 end 14 1…

JAVA入门[6]-Mybatis简单示例

初次使用Mybatis,先手写一个hello world级别的例子&#xff0c;即根据id查询商品分类详情。 一、建表 create table Category ( Id INT not null, Name varchar(80) null, constraint pk_category primary key (Id) ); 插入测试数据 INSERT INTO category VALUES (1,Fish); INS…

ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用

ASP.NET MVC5 EF6 入门教程 (6) View中的Razor使用 原文:ASP.NET MVC5 EF6 入门教程 (6) View中的Razor使用文章来源&#xff1a; Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html 上一节&#xff1a;ASP.NET MVC5 EF6 入门教程 (5) M…

递归--基于回溯和递归的八皇后问题解法

八皇后问题是在8*8的棋盘上放置8枚皇后&#xff0c;使得棋盘中每个纵向、横向、左上至右下斜向、右上至左下斜向均只有一枚皇后。八皇后的一个可行解如图所示&#xff1a; 思路 对于八皇后的求解可采用回溯算法&#xff0c;从上至下依次在每一行放置皇后&#xff0c;进行搜索&a…

matlab emf 读取,20140219-Emf_Demo EMF 矢量图 可以读取和保存EMF 的封闭类 非常实用 matlab 238万源代码下载- www.pudn.com...

文件名称: 20140219-Emf_Demo下载收藏√ [5 4 3 2 1 ]开发工具: Visual C文件大小: 6312 KB上传时间: 2014-07-10下载次数: 2详细说明&#xff1a;EMF 矢量图 可以读取和保存EMF矢量图的封闭类非常实用-EMF EMF vector can read and save the class very useful vector cl…

JS中popup.js

为什么80%的码农都做不了架构师&#xff1f;>>> //popup class 显示弹出窗口&#xff0c;。/*以下为使用popup对象&#xff0c;传入相应的配置参数&#xff0c;弹出不同类型的窗口 function ShowIframe() //显示iframe { var popnew P…

二阶振荡衰减 matlab,基于Matlab/Simulink的二阶控制系统仿真研究

1 二阶控制系统模型本文引用地址&#xff1a;http://www.eepw.com.cn/article/201612/328597.htm能够用二阶微分方程描述的系统称为二阶控制系统。在控制工程实践中&#xff0c;二阶控制系统十分常见&#xff0c;例如&#xff0c;电枢控制的直流电动机&#xff0c;RLC网络和弹簧…

CCF201409-5 拼图(30分)

试题编号&#xff1a; 201409-5 试题名称&#xff1a; 拼图 时间限制&#xff1a; 3.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述给出一个nm的方格图&#xff0c;现在要用如下L型的积木拼到这个图中&#xff0c;使得方格图正好被拼满&#xff0c;请问总共有…

C++ 0x

转载于:https://www.cnblogs.com/iiiDragon/p/3230006.html

Github for Windows使用介绍

Git已经变得非常流行&#xff0c;连Codeplex现在也已经主推Git。Github上更是充斥着各种高质量的开源项目&#xff0c;比如ruby on rails&#xff0c;cocos2d等等。对于习惯Windows图形界面的程序员来讲&#xff0c;Github的使用是需要点时间和耐心的&#xff0c;然而最近Githu…

matlab中udt函数,《MATLAB信号处理超级学习手册》——2.5 离散时间信号中的运算...

本节书摘来自异步社区《MATLAB信号处理超级学习手册》一书中的第2章&#xff0c;第2.5节&#xff0c;作者&#xff1a;MATLAB技术联盟 , 史洁玉著&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看2.5 离散时间信号中的运算MATLAB信号处理超级学习手册2.5.1 离散…

构建Docker镜像(三)

作者:李晓辉联系方式:Xiaohui_lifoxmail.comQQ:939958092一、建立Dockerfile1、准备文件新建一个目录和一个 Dockerfilemkdir /steventouch /steven/Dockerfile2、更新Dockerfile这个步骤是在设计镜像&#xff0c;如果你需要在镜像内包含什么软件&#xff0c;将来开放哪些端口&…

你必须很努力,才能看上去毫不费力

世上没有一件工作不辛苦&#xff0c;没有一处人事不复杂。 从今天起&#xff0c;每天微笑吧&#xff0c; 世上除了生死&#xff0c;都是小事。 不管遇到了什么烦心事&#xff0c;都不要自己为难自己&#xff1b; 无论今天发生多么糟糕的事&#xff0c;都不应该感到悲伤。 今天是…

HDU 4631 Sad Love Story 平面内最近点对

http://acm.hdu.edu.cn/showproblem.php?pid4631 题意: 在平面内依次加点,求每次加点后最近点对距离平方的和 因为是找平面最近点对...所以加点以后这个最短距离一定是递减的...所以最后会形成这样一个函数图像 所以我们只要从后往前依次删点即可... 15秒惊险水过...不过我最小…

itoa的用法

功能&#xff1a;将任意类型的整数转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。 用法&#xff1a;char*itoa(int value,char*string,int radix); int value 被转换的整数&#xff0c;char *string 转换后储存的字符数组&#xff0c;int radix 转换进制数…

Tomcat与Gzip与缓存

国内私募机构九鼎控股打造APP&#xff0c;来就送 20元现金领取地址&#xff1a;http://jdb.jiudingcapital.com/phone.html内部邀请码&#xff1a;C8E245J &#xff08;不写邀请码&#xff0c;没有现金送&#xff09;国内私募机构九鼎控股打造&#xff0c;九鼎投资是在全国股份…

java竖向菜单,垂直滑动菜单

www.lanrentuku.comtd {font-size: 12px;}width"200" />height9 src"images/bit05.gif" width8alignabsMiddle> href"javascript:void(null)">文管产品 src"images/bit06.gif" width8 alignabsMiddle> href"http://w…

[转]第一章 Windows Shell是什么 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987862】...

一个操作系统外壳的不错的定义是它是一个系统提供的用户界面&#xff0c;它允许用户执行公共的任务&#xff0c;如访问文件系统&#xff0c;导出执行程序&#xff0c;改变系统设置等。MS-DOS有一个Command.COM扮演着这个角色。然而Windows已经有了图形界面环境&#xff0c;他的…