PHP面试题及详细答案(真实企业版)_第1页
PHP面试题及详细答案(真实企业版)_第2页
PHP面试题及详细答案(真实企业版)_第3页
PHP面试题及详细答案(真实企业版)_第4页
PHP面试题及详细答案(真实企业版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

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

文档简介

PHP面试题及详细答案(真实企业版)一、PHP基础核心面试题1、简述PHP中常量和变量的区别?答案:1.定义方式不同:变量使用$符号声明,可直接赋值;常量通过define()或const关键字定义,无需$符号。2.值是否可修改:变量赋值后可随时重新赋值、修改值;常量一旦定义,全程不可修改、不可销毁。3.作用域不同:变量有全局、局部、静态作用域,局部变量无法直接在全局使用;常量定义后全局通用,不受函数、代码块作用域限制。4.数据类型:变量支持所有PHP数据类型;常量仅支持标量类型(字符串、数字、布尔、null)。补充:const多用于类常量、编译阶段定义,define()可用于全局代码、运行阶段定义。2、PHP中empty、isset、is_null的区别?答案:这三个函数都是判断变量状态,核心区别在于判定的空值范围不同:1.isset():检测变量是否存在且不为null。变量未定义、值为null时返回false,其余情况(0、空字符串、空数组、false)均返回true。主要用于判断变量是否声明。2.empty():检测变量是否为空值。以下值都会判定为空:0、0.0、''、[]、false、null、未定义变量。只要是代表“空、无内容”的值,empty都返回true。日常多用于判断表单提交、数据是否有效。3.is_null():仅判定变量值是否严格等于null。只有变量值为null时返回true,变量未定义会报错,0、空字符串等都返回false。3、PHP数据类型有哪些?标量和复合类型分别包含什么?答案:PHP共8种基础数据类型:1.标量类型(4种,单一值数据):字符串string、整型int、浮点型float、布尔型bool2.复合类型(2种,可存储多个数据):数组array、对象object3.特殊类型(2种):null(空值)、resource(资源句柄,文件、数据库连接、图片资源等)补充:PHP7+新增严格类型模式,可强制约束变量、函数返回值的数据类型,规避弱类型带来的bug。4、PHP传值赋值和传引用赋值的区别?答案:1.传值赋值(默认方式):新变量会复制原变量的值,两个变量相互独立。修改其中一个变量的值,不会影响另一个变量。示例:$a=1;$b=$a;$b=2;此时$a依旧为1。2.传引用赋值(加&符号):新变量和原变量指向同一个内存地址,本质是同一个数据的别名。修改任意一个变量,另一个变量的值会同步变化。示例:$a=1;$b=&$a;$b=2;此时$a的值同步变为2。场景:大数据数组、对象传递时,使用引用赋值可节省内存开销。5、PHP中static静态变量的作用?答案:1.静态变量仅在第一次调用时初始化,后续调用会保留上一次的值,不会重新赋值。2.作用域仅在当前函数/类内部,全局无法直接访问,但生命周期贯穿整个脚本运行周期。3.函数内的静态变量:函数多次调用之间数据不丢失,可用于统计函数调用次数、缓存临时数据。4.类中的静态属性/方法:属于类本身,不属于实例化对象,可直接通过类名调用,所有对象共享同一个静态属性。二、PHP面向对象面试题1、面向对象三大特性及各自作用?答案:1.封装:将属性和方法封装到类中,通过访问修饰符(public、protected、private)控制访问权限。隐藏内部实现细节,仅对外提供调用接口,提升代码安全性、复用性。2.继承:子类可以继承父类的属性和方法,减少重复代码。子类可重写父类方法,实现功能扩展,PHP仅支持单继承,一个类只能有一个父类。3.多态:同一方法在不同子类中实现不同的逻辑。核心依托继承和方法重写,统一调用入口,适配不同业务场景,提升代码扩展性。2、public、protected、private三种访问修饰符的区别?答案:1.public(公共):公开权限,类内部、子类、外部代码都可以直接访问。2.protected(受保护):仅类内部、继承的子类可以访问,外部无法访问。常用于需要子类复用、但不对外暴露的属性和方法。3.private(私有):权限最低,仅当前类内部可以访问,子类和外部都无法访问。用于保护核心私有数据,防止被篡改。3、接口和抽象类的区别?答案:1.定义关键字:抽象类用abstract定义,接口用interface定义。2.方法实现:抽象类可以包含普通实现方法和抽象方法(无实现);接口所有方法默认都是公开、无实现的抽象方法(PHP8+支持接口默认方法实现)。3.继承/实现限制:一个类只能继承一个抽象类;一个类可以实现多个接口,解决单继承局限。4.属性支持:抽象类可以定义成员变量、常量;接口只能定义常量,不能定义变量。5.使用场景:抽象类用于抽取多个类的公共代码、实现代码复用;接口用于统一规范、定义行为标准。4、PHP构造方法和析构方法的作用?答案:1.构造方法__construct():实例化对象时自动执行,主要用于初始化对象属性、连接数据库、加载配置等初始化操作。可以接收参数,为对象赋值。2.析构方法__destruct():对象销毁、脚本执行结束时自动执行,主要用于收尾操作,比如关闭数据库连接、释放文件资源、清空缓存等,无需手动调用。三、PHP进阶与安全面试题1、PHP中include、require、include_once、require_once的区别?答案:1.报错级别不同:include引入文件失败抛出警告错误,脚本继续执行;require引入文件失败抛出致命错误,脚本终止执行。2.重复引入限制:include/require允许重复引入同一文件;include_once/require_once会判断文件是否已引入,仅引入一次,避免函数、类重复定义报错。使用场景:通用配置文件、核心文件用require_once;模板视图、非核心文件用include。2、简述PHP常见的安全漏洞及防护方案答案:1.SQL注入漏洞:用户输入未过滤,恶意拼接SQL语句。防护:使用PDO/MySQLi预处理语句、参数绑定,禁止直接拼接SQL,过滤特殊字符。2.XSS跨站脚本攻击:前端输入恶意JS代码,页面渲染执行。防护:输出数据转义(htmlspecialchars),设置CSP响应头,过滤用户输入的脚本标签。3.CSRF跨站请求伪造:伪造用户请求执行操作。防护:表单、接口添加Token验证,校验请求来源Referer。4.文件上传漏洞:上传恶意php脚本文件。防护:校验文件后缀、MIME类型,重命名上传文件,禁止上传目录执行脚本权限。5.目录遍历漏洞:通过../遍历服务器文件。防护:过滤路径特殊字符,限制文件访问根目录。3、SESSION和COOKIE的区别?答案:1.存储位置:Cookie存储在客户端浏览器;Session存储在服务器端。2.安全性:Cookie数据可被查看、篡改、删除,安全性低;Session数据在服务器,用户无法直接修改,安全性更高。3.容量限制:Cookie有大小和数量限制,单Cookie一般不超过4KB;Session无严格容量限制。4.依赖关系:Session依赖Cookie存储SessionID,若浏览器禁用Cookie,可通过URL传参维持Session。5.生命周期:Cookie可设置过期时间,永久有效;Session默认脚本结束或超时自动销毁。4、PHP如何防止SQL注入?答案:1.优先使用PDO、MySQLi预处理语句+参数绑定,彻底杜绝SQL拼接,是最有效的防护方式。2.严格过滤、转义用户所有输入数据,过滤单引号、双引号、and、or等SQL特殊字符。3.数据库账号最小权限原则,业务账号仅保留查询、增改权限,禁止授予删表、改库等高权限。4.关闭数据库错误信息回显,避免泄露库表结构信息。5.禁止直接接收用户参数拼接SQL语句、表名、字段名。四、MySQL数据库面试题(PHP配套高频)1、索引的作用、分类及失效场景?答案:索引作用:加速数据库查询速度,降低数据库IO开销,部分索引可实现唯一约束、排序优化。索引分类:主键索引、唯一索引、普通索引、联合索引、全文索引。索引失效常见场景:1.where条件中使用like%xxx(左模糊、全模糊)2.索引字段使用函数、运算、类型转换3.or左右字段有非索引字段4.联合索引不遵循最左匹配原则5.数据库数据量少、频繁更新字段建索引(索引效率低于全表扫描)2、InnoDB和MyISAM引擎的区别?答案:1.事务支持:InnoDB支持事务、事务回滚、ACID特性;MyISAM不支持事务。2.锁机制:InnoDB支持行级锁、表级锁,并发性能高;MyISAM仅支持表级锁,增删改会锁整张表。3.外键:InnoDB支持外键约束;MyISAM不支持。4.崩溃恢复:InnoDB有日志机制,宕机可恢复数据;MyISAM宕机易损坏数据。5.适用场景:InnoDB适用于增删改频繁、需要事务的业务(订单、用户、支付);MyISAM适用于查询多、更新少的静态数据。五、ThinkPHP/Laravel框架高频面试题1、简述MVC架构思想答案:MVC是分层开发架构,核心是代码解耦、分工明确:1.M(Model模型):负责数据层,处理数据库增删改查、数据校验、业务数据逻辑。2.V(View视图):负责展示层,渲染页面、展示数据,接收用户前端输入。3.C(Controller控制器):负责调度层,接收请求、调用模型获取数据、分配数据到视图、返回响应。优势:代码分层清晰,便于维护、迭代,各司其职,减少代码耦合。2、TP框架中ORM模型的作用?答案:ORM即对象关系映射,将数据库表映射为PHP模型类,数据表字段映射为类属性。1.无需手写原生SQL,通过链式方法实现增删改查,提升开发效率。2.自带数据自动验证、自动写入时间戳、字段映射、软删除功能。3.规避SQL注入风险,框架底层封装了参数过滤和预处理。4.支持关联模型,快速实现一对一、一对多、多对多数据表关联查询。六、实战场景面试题1、PHP如何实现文件上传?核心步骤和注意事项答案:核心步骤:1.前端表单设置enctype="multipart/form-data",开启文件上传模式。2.后端通过$_FILES获取上传文件的临时路径、文件名、大小、类型。3.校验文件大小、后缀、MIME类型,过滤非法文件。4.生成唯一文件名(防止覆盖),通过move_uploaded_file将临时文件移动到正式目录。注意事项:1.禁止保留原文件名,防止脚本文件上传执行。2.限制上传目录权限,禁止脚本执行权限。3.配置php.ini上传大小、超时参数,适配业务需求。2、接口返回乱码、跨域问题如何解决?答案:1.乱码解决:页面统一设置UTF-8编码,PHP头部输出header('Content-Type:application/json;charset=utf-8'),数据库、代码文件、前端页面编码统一。2.跨域解决:接口顶部添加跨域响应头,允许指定域名、请求

温馨提示

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

最新文档

评论

0/150

提交评论