版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PHP高频面试题库及详细答案(实战完整版)一、PHP基础语法篇(高频基础题)1、简述PHP变量类型,区分常量和变量的区别答案:PHP变量分为八大类型,分为标量、复合、特殊三类:1、标量类型(基础类型):字符串(string)、整型(int)、浮点型(float)、布尔型(bool);2、复合类型(聚合类型):数组(array)、对象(object);3、特殊类型:资源(resource)、空类型(null)。常量与变量核心区别:1、变量可以随时赋值、修改、销毁;常量一旦定义,无法修改、无法销毁;2、变量作用域灵活,常量默认全局生效,跨脚本、跨函数可直接使用;3、变量前缀带$符号,常量无需$,定义方式为define()或const;4、常量只能存储标量数据(字符串、数字、布尔、null),变量可存储所有类型数据。2、PHP中==和===的区别?!=和!==的区别?答案:1、==是松散比较:只对比数值,会自动进行类型转换。例如0==false、''==0、null==''结果均为true;2、===是严格比较:同时对比数值和数据类型,类型不一致直接返回false,日常开发优先使用;3、!=松散不等,自动类型转换;!==严格不等,校验数值+类型,杜绝隐式转换带来的bug。实战示例:0==true//false;0===true//false1=='1'//true;1==='1'//false3、PHP数据类型自动转换规则,常见坑点有哪些?答案:PHP是弱类型语言,运算时会自动转换数据类型,常见规则及坑点:1、字符串和数字运算时,会截取字符串开头数字转为数值,例如'123abc'+20=143;2、空字符串、0、'0'、null、false、空数组,在布尔判断中均视为false;3、数组对比中,空数组[]==false为true,严格对比则为false;4、小数运算存在精度丢失问题,金融场景禁止直接用float计算金额。4、session和cookie的区别,以及使用场景答案:核心区别:1、存储位置:cookie存储在客户端浏览器,session存储在服务器端;2、安全性:cookie可被篡改、窃取,安全性低;session数据存在服务端,安全性更高;3、存储大小:cookie单条最大4K,总数有限制;session无明确大小限制;4、生命周期:cookie可设置永久有效期,关闭浏览器不失效;session默认浏览器关闭即失效;5、依赖关系:session依赖cookie存储session_id,若浏览器禁用cookie,可通过URL传参实现session共享。使用场景:cookie:记住登录状态、站点偏好设置、浏览记录;session:用户登录态维持、临时数据存储、后台权限校验。5、PHP超全局变量有哪些?各自作用?答案:超全局变量全局生效,函数、类、脚本中无需声明即可使用,共9个:1、$_GET:接收URL地址栏GET请求参数;2、$_POST:接收表单POST提交数据;3、$_REQUEST:合并GET/POST/COOKIE数据,优先级受配置影响,开发不推荐使用(数据混乱);4、$_SERVER:获取服务器信息、请求头、请求方式、脚本路径、IP地址等;5、$_COOKIE:读取客户端cookie数据;6、$_SESSION:操作服务端session数据;7、$_FILES:接收文件上传的文件信息(名称、大小、临时路径、后缀);8、$_ENV:获取系统环境变量;9、$GLOBALS:全局变量集合,可访问所有全局定义的变量。二、PHP数组与函数篇(核心高频)1、PHP常用数组函数及实战用法答案:整理工作中最常用、面试必考函数:1、数组遍历处理:array_map(批量处理数组元素,返回新数组)、array_filter(过滤数组空值、指定条件元素)、array_walk(遍历数组,无返回值,直接修改原数组);2、数组合并拆分:array_merge(合并索引/关联数组,索引数组会重置下标)、array_chunk(分割数组为多维数组);3、数组查询判断:in_array(判断元素是否存在)、array_key_exists(判断键名是否存在)、count(统计数组元素个数);4、数组去重排序:array_unique(数组去重)、sort/rsort(索引数组正序/倒序)、ksort/krsort(按键名排序);5、数组取值赋值:array_pop(删除最后一个元素)、array_shift(删除第一个元素)、array_push(尾部追加元素)。2、include、require、include_once、require_once的区别答案:1、报错级别:include引入文件失败抛出警告,脚本继续执行;require引入失败抛出致命错误,脚本终止执行;2、重复引入:不带once的可重复引入文件;带once的会检测文件是否已引入,避免重复引入报错、重复定义变量/函数;3、使用场景:require/require_once:引入核心配置、公共函数、数据库文件,文件缺失必须终止程序;include/include_once:引入模板文件、侧边栏、广告模块,文件缺失不影响主程序运行。3、PHP传值赋值和传地址赋值的区别答案:1、传值赋值(默认):新变量复制原变量的值,两个变量相互独立,修改其中一个,另一个不受影响;适用于普通数据、简单运算;2、传地址赋值(引用赋值,带&):新变量和原变量指向同一个内存地址,本质是同一个数据,任意一个变量修改,双方都会变化;3、适用场景:大数据数组、对象传递,引用赋值可节省内存开销,避免数据拷贝;开发中慎用,容易造成数据被意外修改。4、递归函数的使用场景及注意事项答案:使用场景:无限级分类、树形结构生成、文件目录遍历、层级数据查询(菜单、部门)。注意事项:1、必须设置递归终止条件,否则会无限递归,导致内存溢出、程序卡死;2、控制递归层级,PHP默认递归深度有限,层级过深需修改配置或改用循环;3、递归效率低于循环,大量数据处理优先用迭代循环,小层级树形数据可用递归。三、PHP面向对象篇(中级核心)1、面向对象三大特性及实际开发应用答案:1、封装:将属性和方法封装在类中,通过访问修饰符控制权限(public/protected/private),隐藏内部实现细节,只暴露对外接口,提高代码安全性、复用性;2、继承:子类继承父类的属性和方法,减少重复代码,实现代码复用,支持单继承、多接口实现;3、多态:子类重写父类方法,同一个方法在不同子类中实现不同逻辑,适配不同业务场景,提高代码扩展性。实战场景:封装数据库操作类、继承公共基础控制器、多支付方式(微信/支付宝)重写支付方法实现多态。2、public、protected、private三种访问修饰符区别答案:1、public(公共):全局可访问,类内部、子类、外部脚本均可调用;2、protected(受保护):仅类内部、继承的子类可访问,外部无法调用;多用于公共业务方法、基础属性;3、private(私有):仅当前类内部可访问,子类和外部均无法调用;多用于私有辅助方法、核心加密属性,杜绝外部篡改。3、接口(interface)和抽象类(abstract)的区别答案:1、定义约束:抽象类可包含普通方法、抽象方法、成员属性;接口只能包含公共抽象方法(PHP7之前无属性,PHP8支持常量);2、继承规则:一个类只能继承一个抽象类;一个类可以实现多个接口,解决单继承局限;3、方法实现:抽象类可存在已实现的普通方法;接口所有方法必须由实现类重写;4、使用场景:抽象类用于同一类事物的通用模板(所有支付方式通用属性);接口用于统一行为规范(所有支付类必须实现pay、refund方法)。4、PHP魔术方法常用列表及作用答案:魔术方法以__开头,无需手动调用,满足条件自动触发:1、__construct():构造方法,实例化类时自动执行,用于初始化数据、连接数据库;2、__destruct():析构方法,对象销毁时自动执行,用于关闭连接、释放资源;3、__get():读取不存在或私有属性时触发;4、__set():给不存在或私有属性赋值时触发;5、__call():调用不存在或私有方法时触发;6、__toString():对象被当作字符串输出时触发;7、__clone():对象克隆时触发,自定义克隆逻辑。四、MySQL数据库篇(面试必考)1、MySQL索引类型、作用及失效场景答案:常用索引类型:1、主键索引(PRIMARY):唯一且非空,一张表只能有一个,查询优先级最高;2、唯一索引(UNIQUE):字段值唯一,允许为空,可防止数据重复;3、普通索引(INDEX):最基础索引,仅提升查询速度,无唯一性约束;4、联合索引:多个字段组合索引,遵循最左匹配原则;5、全文索引:针对大文本字段模糊查询,替代like%%低效查询。索引失效常见场景:1、where条件中使用or、notin、!=、isnotnull;2、索引字段参与运算、使用函数(date()、concat);3、字符串字段不加引号,发生隐式类型转换;4、联合索引不满足最左匹配原则;5、like以%开头(%abc),索引失效,abc%可走索引。2、InnoDB和MyISAM引擎的核心区别答案:1、事务支持:InnoDB支持事务、事务回滚、ACID特性;MyISAM不支持事务;2、锁机制:InnoDB支持行锁、表锁,并发性能高;MyISAM只有表锁,读写阻塞,并发差;3、外键:InnoDB支持外键约束;MyISAM不支持;4、崩溃恢复:InnoDB有日志机制,宕机可恢复数据;MyISAM宕机易数据损坏、丢失;5、查询性能:MyISAM简单查询、全表扫描速度更快;InnoDB适合高频读写、并发业务;生产建议:新项目统一使用InnoDB,仅静态只读数据表可使用MyISAM。3、SQL注入原理及PHP防护方案答案:注入原理:直接将前端用户输入拼接进SQL语句,用户通过输入特殊字符(单引号、or、union)篡改SQL逻辑,实现查询、删除、篡改数据。PHP防护手段:1、核心方案:使用PDO/Mysqli预处理语句+参数绑定,杜绝SQL拼接;2、输入过滤:对用户输入进行转义、过滤特殊字符,限制输入格式;3、关闭错误提示:隐藏数据库报错信息,防止泄露表结构、字段信息;4、数据库权限最小化:业务账号仅授予查询、新增、修改权限,禁止删除、改表权限;5、禁止使用原生拼接SQL,统一封装数据库操作方法。4、数据库慢查询优化常用方案答案:1、开启慢查询日志,定位低效SQL语句;2、合理建立索引,避免索引失效,优先优化高频查询SQL;3、避免select*,只查询需要的字段,减少数据传输;4、分页查询使用limit偏移优化,大偏移量避免直接limit10000,10;5、拆分大SQL,避免多表联查过多,适当冗余字段、分表分库;6、对高频静态数据做缓存(Redis),减少数据库查询压力。五、PHP进阶与性能优化篇1、PHP常见报错级别及区分答案:1、致命错误(ERROR):脚本终止执行,如函数不存在、类未定义、require文件缺失;2、警告错误(WARNING):脚本继续执行,如include文件缺失、参数不匹配;3、注意错误(NOTICE):轻微提示,不影响程序运行,如未定义变量、数组下标不存在;4、严格错误(STRICT):代码不规范提示,兼容旧版本语法问题。2、PHP内存溢出的常见原因及解决办法答案:常见原因:1、无限递归、死循环导致代码持续占用内存;2、一次性查询处理超大批量数据,全部加载到内存;3、静态变量、全局变量持续累积数据,不释放;4、文件、数据库、Redis资源未手动关闭释放。解决办法:1、优化代码逻辑,终止死循环、非法递归;2、大数据分页查询、分批处理,避免一次性加载;3、处理完数据及时销毁变量(unset)、关闭资源连接;4、合理调整php.ini内存限制,不盲目调大,优先优化代码。3、PHP性能优化实战技巧答案:1、代码层面:多用内置函数(底层C实现,速度更快),少用自定义循环;避免重复计算、重复查询;2、数据库层面:优化索引、杜绝慢SQL、合理缓存、减少联表查询;3、文件层面:减少文件引入次数,优先使用require_once,避免重复加载;4、缓存优化:静态页面、接口数据、配置数据使用Redis/文件缓存;5、配置优化:开启OPcache缓存PHP脚本编译文件,提升脚本加载速度;6、前端优化:合并静态资源、开启GZIP压缩、减少接口请求次数。4、GET和POST请求的区别及使用场景答案:1、参数位置:GET参数拼接在URL地址栏,POST参数放在请求体中;2、数据大小:GET有URL长度限制,传输数据小;POST无明确大小限制,可传大数据、文件;3、安全性:GET参数暴露,可被缓存、记录历史;POST相对安全,适合敏感数据;4、书签缓存:GET请求可收藏书签、可缓存;POST无法缓存、无法收藏;5、幂等性:GET是幂等请求,多次请求结果一致;POST非幂等,多次提交可能重复新增数据;场景:查询、列表、详情用GET;新增、修改、提交表单、上传文件用POST。六、框架与实战场景篇(Laravel/TP通用)1、MVC架构思想及各层作用答案:MVC是分层开发思想,拆分业务逻辑,实现解耦、便于维护:1、M(Model模型):负责数据层,处理数据库查询、新增、修改、删除,封装数据逻辑;2、V(View视图):负责展示层,渲染页面、输出数据,仅做展示,不写业务逻辑;3、C(Controller控制器):负责调度层,接收请求、调用模型、渲染视图,处理业务流程。核心优势:代码分层清晰、各司其职,便于团队协作、后期迭代维护。2、Laravel/ThinkPHP中ORM模型的优缺点答案:优点:1、无需手写原生SQL,语法简洁,开发效率高;2、自动防SQL注入,安全性高;3、支持链式操作、关联模型、自动分页、数据自动转换;4、代码可读性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 推动知识共享激发创新潜能方案
- 2026年物业管理企业战略规划与实施测试卷及答案
- 2026年注册环保工程师考试环境影响评价报告编制专项训练习题及答案
- 人教版高中英语高三上册第8单元听力专项训练习题及答案
- 电子商务师职业资格考试网络营销基础与实务模拟试卷及答案
- 2026年上海市护士资格考试护理安全管理专项习题及答案
- 2026年天津市体育教练职业水平考试真题汇编及答案
- 2026年FRM一级考试风险管理基础知识点巩固习题及答案
- 2026年天津市环境影响评价师考试注册环保工程师知识点巩固习题及答案
- 年产7000吨生物基胡椒基丁醚及香料系列产品项目可行性研究报告模板-立项申报用
- 中国2型糖尿病防治指南(2024版)解读课件
- 公司廉洁风险防控管理办法
- 人教版 浙教版 培智 生活语文五年级上册 部分教案
- 品管圈PDCA获奖案例提高危重患者晨间床旁交接班的规范率
- 输变电工程施工质量验收统一表式附件1:线路工程填写示例
- 两用物项和技术进出口管理资料课件
- 2024年度最终版军人心理学教案
- 某知名制药外企计算机化系统验证(CSV)管理程序
- 演示文稿社会系统研究方法
- CDEF系列水电解制氢设备使用说明书
- DB13T 3035-2023 建筑消防设施维护保养技术规范
评论
0/150
提交评论