版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PHP常见面试题及详细答案(实战版)一、PHP基础语法篇1、PHP中echo、print、print_r、var_dump的区别?这四个都是PHP常用输出方式,核心区别在返回值、输出类型和使用场景,实际开发中分工很明确:echo:语言结构,无返回值,支持输出多个字符串,执行速度最快,只能输出字符串、数字等基础类型,开发中最常用。print:也是语言结构,有返回值(固定返回1),一次只能输出一个字符串,速度比echo稍慢,使用场景极少。print_r:专门用于打印复合类型(数组、对象),只会输出值,不显示数据类型,无返回值,适合简单打印数组数据。var_dump:调试专用,会同时输出数据的类型、值、长度,支持所有数据类型,可打印null、布尔值,开发调试排查问题首选。2、PHP数据类型有哪些?标量和复合类型区别?PHP一共8种原生数据类型,分为四大类:1.标量类型(4种):字符串、整型、浮点型、布尔型,存储单一数据值;2.复合类型(2种):数组、对象,可存储多个不同类型的数据;3.特殊类型(2种):NULL、资源(resource);4.伪类型:mixed、number、callback(多用于函数参数声明)。核心区别:标量类型变量只能存一个值,赋值、传递时是值传递;复合类型默认是引用传递,可批量存储多组数据。3、PHP常量和变量的区别?define和const的区别?常量与变量区别:变量可重复赋值、可修改、可销毁;常量一旦定义,全程不可修改、不可销毁;变量作用域灵活,常量默认全局生效;变量名区分大小写,常量默认区分大小写(可设置不区分)。define和const区别:const是语言结构,编译阶段解析,效率更高;define是函数,运行阶段解析;const必须写在顶层,不能在条件判断、循环、函数内定义;define可以动态定义,支持条件内使用;const支持类常量定义,define只能定义全局常量;PHP7.3之后const支持数组常量,低版本仅define支持。4、PHP中isset、empty、is_null的区别?三个函数都是判断变量状态,面试高频考点,核心差异如下:isset():检测变量是否存在且不为null。变量未定义、值为null时返回false,其余情况(0、空字符串、空数组、false)均返回true。常用于判断表单、参数是否存在。empty():检测变量是否为空。空字符串、0、0.0、false、空数组、null、未定义变量,都会返回true;非空非零数据返回false。适合判断参数是否有效。is_null():仅判断变量值是否为null。只有变量值严格为null时返回true,其余全部返回false。二、数组与函数篇1、PHP索引数组和关联数组的区别?索引数组:下标为数字,默认从0开始自动递增,适合存储有序列表数据,如商品列表、分页数据;关联数组:下标为自定义字符串,键值一一对应,适合存储结构化数据,如用户信息、配置参数;补充:PHP数组本质是有序映射,两种数组可以混合使用,但开发中尽量分开,保证代码规范性。2、常用PHP数组函数有哪些?(实战高频)增删:array_push(尾部追加)、array_pop(尾部删除)、array_unshift(头部追加)、array_shift(头部删除);键值操作:array_keys(获取所有键)、array_values(获取所有值)、array_merge(数组合并);筛选排序:array_filter(数组过滤)、array_map(数组回调处理)、sort/rsort(索引数组排序)、ksort/krsort(按键排序);去重对比:array_unique(数组去重)、array_diff(数组差集)、array_intersect(数组交集)。3、PHP函数传值和传引用的区别?传值(默认):函数内部会复制一份变量值,内部修改参数不会影响外部原变量,数据独立,安全性高,普通数据默认使用。传引用(&符号):函数内外共用同一个变量地址,内部修改参数会直接改变外部原变量,无需返回值即可修改原数据,适合处理大数据、数组,减少内存消耗。注意:开发中尽量少用引用,容易出现变量污染、逻辑混乱的问题。4、PHP静态变量static的作用?static修饰的局部变量,不会在函数执行结束后销毁,会保留上一次执行的值,下次调用函数可继续使用。核心特点:仅初始化一次,常驻内存,仅在当前函数内有效。常用于统计函数调用次数、缓存临时数据、递归计数等场景。三、面向对象OOP篇1、PHP面向对象三大特性及作用?封装:将属性和方法封装到类中,通过访问修饰符控制权限(public/protected/private),隐藏内部实现细节,只暴露对外接口,提高代码安全性和复用性。继承:子类继承父类的属性和方法,减少重复代码,实现代码复用,一个父类可以被多个子类继承,PHP为单继承,一个类只能继承一个父类。多态:子类重写父类方法,同一个方法在不同子类中实现不同逻辑,提高代码扩展性,配合接口、抽象类实现。2、三种访问修饰符的区别?public(公共):默认权限,类内部、子类、外部都可以访问;protected(受保护):类内部、子类可以访问,外部无法访问;private(私有):仅当前类内部可以访问,子类和外部均不可访问,安全性最高。3、抽象类和接口的区别?抽象类abstract:可以包含普通属性、普通方法、抽象方法;子类只能单继承一个抽象类;可以有构造方法,支持变量定义;用于抽取公共业务逻辑,实现代码复用。接口interface:只能有常量和抽象方法(PHP7之前无普通方法,PHP8支持);一个类可以实现多个接口;无构造方法,不能定义成员变量;用于规范代码标准、定义统一接口规范。4、PHP构造方法和析构方法的作用?构造方法__construct():实例化对象时自动触发,用于初始化对象属性、连接数据库、加载配置等初始化操作。析构方法__destruct():对象销毁、程序执行结束时自动触发,用于释放资源,如关闭数据库连接、清空文件缓存、销毁内存资源。5、魔术方法常用的有哪些?作用是什么?__get():读取不存在或私有属性时自动触发;__set():给不存在或私有属性赋值时自动触发;__isset():对不存在或私有属性使用isset判断时触发;__unset():销毁不存在或私有属性时触发;__call():调用不存在或私有方法时触发;__toString():对象被当作字符串输出时触发;__clone():对象克隆时触发,用于修改克隆后的对象属性。四、PHP与MySQL交互篇1、PHP连接数据库的三种方式及区别?1、MySQL原生扩展:最老旧,过程式写法,安全性差,不支持预处理、事务,已被淘汰,新项目禁止使用。2、MySQLi扩展:针对MySQL专属扩展,支持面向对象、面向过程两种写法,支持预处理、事务、防SQL注入,仅适配MySQL数据库。3、PDO扩展:通用数据库扩展,支持MySQL、Oracle、SQLServer等多种数据库,面向对象风格,安全性、兼容性最好,是目前企业开发主流选择。2、什么是SQL注入?如何防范?SQL注入是攻击者通过拼接恶意参数,篡改SQL语句逻辑,非法查询、删除、修改数据库数据的攻击方式,是PHP最常见的安全漏洞。防范手段(核心):使用PDO/MySQLi预处理语句+参数绑定,杜绝字符串拼接SQL;对用户输入参数进行过滤、转义、类型强制转换;关闭数据库错误信息暴露,隐藏数据库详情;数据库账号最小权限原则,禁止使用root账号连接业务数据库。3、MySQL索引的作用?哪些场景不适合建索引?索引本质是数据库的目录,作用是大幅提升查询速度,减少数据库IO消耗,降低查询时间复杂度。不适合建索引的场景:数据量极少的表,索引会增加额外开销;频繁更新、删除的字段,索引会降低写入效率;重复度极高的字段(如性别、状态),索引无效果;查询频率极低的字段,无需建索引。五、文件与会话篇1、Cookie和Session的区别?存储位置:Cookie存在客户端浏览器,Session存在服务器端;安全性:Cookie可被篡改、窃取,安全性低;Session数据存在服务端,安全性更高;大小限制:Cookie有大小限制(单条4K左右);Session无明显大小限制;生命周期:Cookie可设置永久有效,浏览器关闭可保留;Session默认浏览器关闭失效;依赖关系:Session默认依赖Cookie存储session_id,Cookie禁用后可通过URL传参兼容。2、PHP文件上传流程及安全防护?上传流程:前端表单设置enctype="multipart/form-data"→后端获取上传文件信息→校验文件类型、大小、后缀→生成唯一文件名→移动临时文件到指定目录。安全防护:禁止使用原文件名保存,防止路径遍历、文件覆盖;同时校验文件后缀、MIME类型、文件真实头信息,防止伪装文件;限制文件上传大小、禁止上传php、exe等可执行脚本文件;上传目录禁止执行脚本权限,独立部署静态资源;对上传文件重命名、加密命名。六、框架与实战考点(Laravel/ThinkPHP通用)1、MVC的工作原理?MVC是分层开发架构,核心是代码解耦、分工明确:M(Model模型):负责数据层,处理数据库增删改查、数据校验、业务数据逻辑;V(View视图):负责展示层,展示页面数据、渲染前端页面;C(Controller控制器):负责逻辑调度,接收请求、调用模型、分配视图,不直接操作数据库。2、Laravel的服务容器和依赖注入是什么?服务容器:Laravel的核心机制,是一个全局对象容器,用于统一管理类的实例、依赖、服务,实现类的自动加载和实例化,避免重复new对象。依赖注入:无需手动实例化类,框架自动将所需依赖注入到方法、构造函数中,降低代码耦合度,方便单元测试和代码维护。3、TP5/6和Laravel的区别?ThinkPHP:轻量、上手简单、文档中文友好,开发速度快,适合中小型项目、快速开发;Laravel:功能完善、规范严格、生态丰富,支持队列、事件、中间件、权限等高级功能,适合大型项目、企业级开发。七、安全与性能优化篇1、PHP常见安全漏洞及解决方案?SQL注入:使用PDO预处理、参数绑定,禁止SQL字符串拼接;XSS跨站脚本攻击:前端输出转义、后端过滤输入、开启CSP防护;CSRF跨站请求伪造:开启表单令牌验证、校验请求来源;文件包含漏洞:禁止动态引入用户可控参数,限制文件包含路径;目录遍历漏洞:过滤../路径字符,限制文件访问目录。2、PHP代码性能优化方案?优先使用echo输出,摒弃print、printf;循环内不做重复计算、不实例化对象,减少循环开销;合理使用缓存(Redis、文件缓存),减少数据库查询;优化SQL语句、合理建索引、避免select*查询;开启OPcache缓存PHP脚本,提升脚本加载速度;批量操作数据,避免单次循环频繁操作数据库。八、易错高频面试简答题1、PHP中==和===的区别?==是弱等于,只对比值,会自动转换数据类型;===是强等于,同时对比值和数据类型,推荐开发中全程使用===,避免类型转换带来的逻辑bug。2、PHP异常和错误的区别?错误是程序运行致命问题,如语法错误、函数不存在,会终止程序执行;异常是业务逻辑错误,可通过t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48220-2026爆炸物品公共安全管理术语
- AI在科学教育中的应用
- 面向给排水学生的水务科技P PT
- 2027届山东省枣庄市中学区永安乡黄庄中学八年级数学第一学期期末学业质量监测模拟试题含解析
- 地籍测量员安全操作规程
- 老旧小区文化活动站改造装修方案
- 2026年传染病培训考试考试题及答案
- 2025-2026学年内蒙古自治区牙克石市初中生物七年级期末下册自测模拟专项特训题(详细参考解析)
- OSCE临床技能考试题库及详细参考答案
- OP1岗位基础能力测试试题
- 急诊护理风险评估与干预
- 2025煤炭行业发展年度报告
- 2026内蒙古鄂尔多斯市国有资产投资控股集团有限公司社会招募见习人员17名笔试历年参考题库附带答案详解
- 2026春季学期国开机电专科《可编程控制器应用实训》一平台在线形考形成任务1至6答案
- 《大气科学概论》教学课件-第一章大气概述
- 中医拔罐院感培训课件
- 2025至2030中国汽车电子检测行业发展分析及投资风险预警与发展策略报告
- KV3000系列变频器使用手册
- 浙江省杭州市(含周边)重点中学2025-2026学年高二上学期期中语文试题(含答案)
- 医学高脂血症与动脉粥样硬化案例教学课件
- 2025年广电网络公司招聘面试模拟题及答案
评论
0/150
提交评论