PHP技术面试题及详细参考答案(完整版)_第1页
PHP技术面试题及详细参考答案(完整版)_第2页
PHP技术面试题及详细参考答案(完整版)_第3页
PHP技术面试题及详细参考答案(完整版)_第4页
PHP技术面试题及详细参考答案(完整版)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP技术面试题及详细参考答案(完整版)一、PHP基础语法面试题1、简述PHP中echo、print、print_r、var_dump的区别?参考答案:echo:语言结构,不是函数,无返回值,可一次性输出多个变量/字符串,执行效率最高,日常页面输出最常用,只能输出字符串、数字等基础类型。print:基本等同于函数,有返回值(固定返回1),一次只能输出一个内容,效率低于echo,使用场景极少。print_r:专门用于打印复合类型数据(数组、对象),输出格式简洁,会格式化展示数组键值对,无数据类型显示,仅用于开发调试。var_dump:调试专用输出,会精准展示数据的类型、值、长度,支持所有数据类型,包括null、布尔值、资源类型,是开发排错最常用的打印方式。2、PHP中常量和变量的区别?定义方式分别有哪些?参考答案:核心区别:变量:运行过程中值可随时修改、销毁,作用域灵活,区分大小写。常量:一旦定义无法修改、无法销毁,全局生效(默认),默认区分大小写,值只能是标量数据(字符串、数字、布尔、null)。定义方式:变量:直接使用$变量名=值定义。常量:①define('常量名',值,是否忽略大小写)全局定义;②const常量名=值类内/全局定义,支持常量表达式,优先级更高。3、PHP数据类型有哪些?标量类型和复合类型分别包含什么?参考答案:PHP一共8种原生数据类型,分为四大类:标量类型(4种):字符串(string)、整型(int)、浮点型(float)、布尔型(bool)复合类型(2种):数组(array)、对象(object)特殊类型(2种):空类型(null)、资源类型(resource)补充:PHP7+支持严格类型约束,可通过declare(strict_types=1)开启严格模式,强制匹配数据类型。4、isset()、empty()、is_null()的详细区别?参考答案:isset():检测变量是否存在且不为null。变量未定义、值为null时返回false,其余情况(0、''、[]、false)均返回true,常用于判断变量是否合法存在。empty():检测变量是否为空。空的定义包含:0、0.0、''、[]、null、false、未定义变量,以上情况均返回true,其余返回false。is_null():精准检测变量值是否为纯null,仅变量值为null时返回true,变量未定义会直接报错。二、PHP数组与字符串面试题(高频)1、PHP索引数组和关联数组的区别?遍历数组常用方式有哪些?参考答案:区别:索引数组:键名是连续数字(默认从0开始),适合有序数据集合,如列表、分页数据。关联数组:键名是自定义字符串,键值一一对应,适合存储结构化数据,如用户信息、配置参数。常用遍历方式:for循环:仅适用于索引数组,需获取数组长度,效率高但局限性大。foreach循环:PHP最主流遍历方式,支持索引、关联数组,无需判断长度,语法简洁,支持键值同时获取。each()+while:老式遍历方式,PHP7.2已废弃,不推荐使用。2、常用PHP数组函数有哪些?列举工作中最常用的10个并说明用途参考答案:array_merge():合并多个数组,字符串键名覆盖、数字键名重新排序。array_push():向数组尾部追加元素。array_pop():删除并返回数组尾部最后一个元素。array_shift():删除并返回数组头部第一个元素。array_unshift():向数组头部插入元素。in_array():判断元素是否存在于数组中,返回布尔值。array_key_exists():判断指定键名是否存在于数组中。array_column():多维数组快速提取指定字段,常用于列表数据字段筛选。array_unique():去除数组重复元素。sort()/rsort():对数组升序/降序排序,重置数组键名。三、PHP面向对象面试题(核心必考)1、面向对象三大特性及在PHP中的体现?参考答案:封装:将属性和方法封装在类中,通过访问修饰符(public、protected、private)控制权限,隐藏内部实现细节,仅对外提供公开调用接口,提升代码安全性。继承:通过extends让子类继承父类的属性和方法,实现代码复用,减少重复代码,PHP仅支持单继承,一个子类只能有一个父类。多态:子类重写父类方法,同一个方法在不同子类中实现不同逻辑,配合接口、抽象类实现,提升代码扩展性。2、public、protected、private三种访问修饰符的区别?参考答案:public(公共):全局可访问,类内部、子类、外部代码均可直接调用。protected(受保护):仅类内部、继承的子类可访问,外部代码无法调用。private(私有):仅当前类内部可访问,子类、外部代码均无法调用,安全性最高。3、抽象类和接口的区别?实际工作中如何选择?参考答案:核心区别:抽象类(abstract):可以包含普通属性、普通方法、抽象方法;子类只能单继承;可定义构造方法;支持变量、常量。接口(interface):只能包含常量和抽象方法(PHP8前),PHP8支持接口普通方法;类可多实现接口;无构造方法;不能定义变量。使用场景选择:需要统一代码结构、复用公共逻辑,用抽象类。需要规范行为标准、多类差异化实现、解除代码耦合,用接口。4、PHP构造方法、析构方法的作用及触发时机?参考答案:构造方法__construct():实例化对象时自动触发,主要用于初始化对象属性、连接数据库、加载配置等初始化操作。析构方法__destruct():对象销毁、脚本执行结束时自动触发,主要用于释放资源,如关闭数据库连接、销毁文件句柄、清空缓存等。四、PHP常用超级全局变量1、列举PHP常用超级全局变量及用途参考答案:$_GET:接收URL地址栏、get方式提交的参数。$_POST:接收表单、接口post方式提交的参数。$_REQUEST:同时接收get、post、cookie参数,优先级受配置影响,开发中不推荐使用,参数混乱易出问题。$_SERVER:获取服务器信息、请求信息,如请求方式、域名、IP、脚本路径、UA信息。$_COOKIE:读取客户端cookie数据。$_SESSION:服务端存储的会话数据,用于用户登录状态维持。$_FILES:接收文件上传的所有信息,包括文件名、大小、临时路径、后缀等。$GLOBALS:全局变量集合,可在任意作用域调用全局变量。五、PHP会话与Cookie、Session面试题1、Cookie和Session的区别?优缺点对比参考答案:存储位置:Cookie存储在客户端浏览器;Session存储在服务端。安全性:Cookie可被篡改、窃取,安全性低;Session数据在服务端,安全性更高。存储大小:Cookie有大小限制(单条4KB左右);Session无严格大小限制。有效期:Cookie可设置永久有效;Session默认浏览器关闭即失效,可手动设置过期时间。依赖关系:Session默认依赖Cookie存储SessionID,客户端禁用Cookie时,可通过URL传参维持会话。2、Session失效的原因有哪些?如何解决Session丢失问题?参考答案:失效原因:浏览器关闭,临时Cookie清空,SessionID丢失。服务端session过期、垃圾回收机制清理session文件。服务器重启、临时目录清空。跨域名、跨子域名请求,Cookie无法传递。解决方案:手动设置session有效期,延长垃圾回收时间。将session存储到Redis、数据库中,替代文件存储,支持跨服务器共享。开启cookie跨子域名共享配置,统一域名作用域。六、PHP数据库MySQL面试题1、PHP连接MySQL的三种方式及区别?参考答案:MySQL原生扩展:PHP早期版本使用,过程式写法,不支持预处理、事务,安全性差,已被彻底废弃,新项目禁止使用。MySQLi:MySQL增强版,支持面向对象、过程式两种写法,支持预处理、事务、多语句查询,仅适配MySQL数据库,兼容性单一。PDO:通用数据库驱动,支持MySQL、Oracle、SQLite等多种数据库,统一操作接口,安全性最高,支持预处理防SQL注入,是目前企业项目首选方案。2、什么是SQL注入?PHP如何彻底防范SQL注入?参考答案:SQL注入是攻击者通过伪造、拼接参数,恶意修改SQL语句逻辑,实现窃取、篡改、删除数据库数据的攻击方式。防范方案(由优到劣):使用PDO/MySQLi预处理语句+参数绑定,彻底杜绝参数拼接,最安全、最主流。严格过滤、转义用户输入,过滤特殊符号(单引号、双引号、分号、and/or等)。关闭数据库多余权限,业务账号仅赋予查询、新增、修改权限,禁止删除、改表权限。开启PHP魔术引号(不推荐,兼容性差),优先使用预处理方案。七、PHP错误与异常处理1、PHP错误和异常的区别?如何自定义异常处理?参考答案:区别:错误:PHP脚本运行时的语法错误、环境错误,默认直接终止脚本执行,分为致命错误、警告错误、通知错误。异常:业务逻辑层面的主动抛出的错误,可被try-catch捕获,不会直接终止脚本,可自定义处理逻辑。自定义异常处理:继承系统Exception类,自定义业务异常类;业务逻辑出错时,通过thrownew自定义异常类()抛出异常;通过try{}catch(Exception$e){}捕获异常,统一返回错误信息、记录日志。八、ThinkPHP/Laravel框架高频面试题1、简述MVC架构思想及在PHP框架中的体现参考答案:MVC是分层开发架构,核心是数据、逻辑、视图分离,降低代码耦合度:M(Model模型):负责数据库交互、数据处理、业务逻辑,封装数据查询、修改、验证规则。V(View视图):负责页面展示、数据渲染,返回HTML、JSON、接口数据。C(Controller控制器):负责接收请求、调度逻辑、调用模型、返回结果,是视图和模型的中间调度层。2、框架中ORM是什么?有什么优缺点?参考答案:ORM即对象关系映射,框架将数据库表映射为模型类,数据表字段映射为类属性,开发者无需手写原生SQL,通过面向对象方式操作数据库。优点:代码简洁、开发效率高、防SQL注入、适配多数据库、可读性强。缺点:复杂查询效率低于原生SQL,部分复杂关联查询语法繁琐,大数据量场景需优化。九、PHP安全面试题(企业必问)1、PHP常见安全漏洞及防范措施参考答案:SQL注入:使用PDO预处理、参数绑定,过滤用户输入。XSS跨站脚本攻击:输出数据使用htmlspecialchars()转义,禁止前端注入JS代码,开启CSP防护。CSRF跨站请求伪造:接口请求验证Token、开启框架CSRF防护、校验请求来源Referer。文件上传漏洞:校验文件后缀、MIME类型、文件哈希值,禁止上传php、exe等可执行文件,上传文件独立存储、禁止执行权限。目录遍历漏洞:过滤../路径跳转符号,限制文件读取根目录。十、PHP性能优化面试题1、简述PHP项目常用性能优化方案参考答案:代码层优化:减少循环内数据库查询、文件读写;精简代码逻辑;合理使用缓存,避免重复计算。数据库优化:高频查询字段加索引;避免select*;分页查询、读写分离;拆分大表。缓存优化:使用Redis缓存热点数据(用户信息、配置、列表数据);开启页面静态缓存、数据缓存。服务层优化:开启OPcache缓存PHP脚本编译文件;升级PHP版本、优化php

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论