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

下载本文档

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

文档简介

PHP高频面试题及详细答案(实战版)一、PHP基础语法篇1、简述PHP中常量和变量的区别?答案:1)定义方式不同:变量使用$符号声明,常量通过define()或const定义,不带$;2)值是否可修改:变量的值可以随时重新赋值、修改;常量一旦定义,全程不可修改、不可销毁;3)作用域不同:变量有全局、局部、静态作用域;常量一旦定义,全局所有位置都可访问,不受函数、作用域限制;4)数据类型:常量只能是标量数据(字符串、数字、布尔、null),变量可以是任意类型,包括数组、对象。2、const和define()的区别?答案:1)执行时机:const是编译阶段解析,效率更高;define()是运行阶段执行;2)使用场景:const可以用于类内部定义类常量;define()只能定义全局常量;3)表达式支持:const不支持表达式赋值;define()可以传入表达式;4)大小写控制:define()可以设置第三个参数为true开启不区分大小写,const严格区分大小写。3、PHP数据类型有哪些?区分标量、复合、特殊类型答案:1)标量类型(基础单一值):字符串string、整型int、浮点型float、布尔bool;2)复合类型(可存储多个数据):数组array、对象object;3)特殊类型:null、资源resource、回调类型callable。日常开发最常用的就是字符串、数字、数组、对象,资源类型多用于文件、数据库、网络句柄。4、==和===的区别?答案:==是弱等于,只对比数值,会自动做类型转换;===是强等于,同时对比数值和数据类型,类型不同直接返回false。举例:0=='0'结果为true,0==='0'结果为false。开发中优先使用强等于,避免隐式转换带来的bug。5、isset()、empty()、is_null()的区别?答案:1)isset():检测变量是否存在且不为null,变量定义过且值不是null就返回true;2)empty():检测变量是否为空,空字符串、0、0.0、空数组、null、false都会判定为空,返回true;3)is_null():仅判断变量值是否严格为null。实战场景:判断表单参数是否存在用isset,判断参数是否为空值用empty。二、数组与常用函数篇6、PHP索引数组和关联数组区别?答案:索引数组:下标是连续数字,默认从0开始,适合存储有序列表数据;关联数组:下标是自定义字符串或数字,键值一一对应,适合存储结构化数据,类似键值对字典。PHP数组本质是有序映射,两种形式可以混用。7、常用数组函数有哪些?(高频必考)答案:1)增删:array_push尾部追加、array_pop尾部删除、array_unshift头部插入、array_shift头部删除;2)键值操作:array_keys获取所有键、array_values获取所有值、array_merge数组合并;3)筛选对比:array_filter数组过滤、array_map遍历处理每个元素、array_diff数组差集、array_intersect数组交集;4)排序:sort升序、rsort降序、asort保留键升序、ksort按键排序。8、array_merge和+合并数组的区别?答案:1)array_merge:如果键名重复,后面的数组值会覆盖前面的;数字下标会重新索引排序;2)+合并:键名重复时,保留前面数组的值,后面的直接舍弃;不会重置数字下标。日常开发合并数组优先用array_merge,逻辑更符合预期。三、面向对象OOP篇(核心重点)9、面向对象三大特性及各自作用?答案:封装:将属性和方法封装在类中,通过访问修饰符控制权限,隐藏内部细节,只暴露可用接口,提升代码安全性和可维护性;继承:子类继承父类的属性和方法,实现代码复用,减少重复代码,方便统一维护公共逻辑;多态:同一个方法,不同子类实现不同逻辑,调用时自动匹配对应子类实现,提升代码扩展性。10、public、protected、private访问权限区别?答案:1)public:公共的,类内部、子类、外部代码都可以访问;2)protected:受保护的,仅类内部和子类可以访问,外部无法调用;3)private:私有的,仅当前类内部可以访问,子类和外部都无法访问。11、构造方法和析构方法的作用?答案:构造方法__construct():实例化对象时自动执行,常用于初始化属性、连接数据库、加载配置等初始化操作;析构方法__destruct():对象销毁、脚本执行结束时自动执行,常用于关闭资源、释放内存、断开数据库连接。12、抽象类和接口的区别?答案:1)定义关键字:抽象类用abstract,接口用interface;2)方法实现:抽象类可以有普通实现方法和抽象方法;接口所有方法默认都是抽象的,不能有实现;3)成员变量:抽象类可以定义属性变量;接口只能定义常量;4)继承数量:类只能继承一个抽象类;类可以实现多个接口;5)使用场景:抽象类用于提取公共代码复用;接口用于统一规范、定义行为标准。13、PHP魔术方法常用的有哪些?答案:1)__construct构造、__destruct析构;2)__get访问不存在属性自动触发、__set赋值不存在属性触发;3)__isset判断未知属性、__unset销毁未知属性;4)__call调用不存在方法自动触发;5)__toString对象被当作字符串输出时触发。四、文件与目录、Cookie&Session14、Cookie和Session区别?答案:1)存储位置:Cookie存客户端浏览器,Session存服务端;2)安全性:Session更安全,用户无法篡改;Cookie可被查看、篡改,适合存非敏感数据;3)大小限制:Cookie有大小和数量限制;Session理论无限制;4)依赖关系:Session依赖Cookie,默认通过Cookie传递session_id;5)生命周期:Cookie可设置永久有效;Session默认浏览器关闭即失效,也可手动设置过期时间。15、Session失效的原因有哪些?答案:1)浏览器关闭,临时Cookie清除,session_id丢失;2)服务端session文件过期被垃圾回收删除;3)手动执行session_destroy()销毁会话;4)更换浏览器、更换设备访问,session_id改变;5)php.ini中session过期时间配置过小。五、PHP与MySQL数据库篇16、PHP连接数据库的三种方式及区别?答案:1)MySQL原生扩展:已废弃,不安全,不支持预处理,项目基本不用;2)MySQLi:分为面向对象和面向过程,支持预处理、事务,仅支持MySQL数据库;3)PDO:通用数据库扩展,支持MySQL、Oracle、SQLite等多种数据库,兼容性最好,支持预处理、事务,是目前主流项目首选。17、什么是SQL注入?如何防止?答案:SQL注入是用户恶意输入特殊语句,拼接进SQL语句,篡改查询逻辑,实现拖库、删表、越权查询等攻击。防护手段:1)使用PDO/MySQLi预处理语句+参数绑定,杜绝字符串拼接SQL;2)对用户输入做过滤、转义、正则校验;3)数据库账号最小权限,禁止使用root账号运行项目;4)关闭数据库错误详情输出,避免泄露表结构。18、事务的四大特性ACID?答案:原子性:事务要么全部执行成功,要么全部回滚,不可部分执行;一致性:事务执行前后,数据库数据完整性一致,不会出现数据错乱;隔离性:多个事务之间相互隔离,互不干扰;持久性:事务提交成功后,数据永久保存,宕机也不会丢失。六、PHP安全与性能优化19、PHP常见安全漏洞及解决方案答案:1)SQL注入:使用预处理语句,禁止拼接SQL;2)XSS跨站脚本攻击:输出数据时使用htmlspecialchars转义,过滤js脚本;3)CSRF跨站请求伪造:表单、接口增加token验证;4)文件上传漏洞:校验文件后缀、MIME类型,重命名存储文件,禁止上传php可执行文件;5)目录遍历漏洞:限制文件读取路径,过滤../特殊字符。20、简单说下PHP代码优化方案答案:1)减少文件包含、减少重复实例化对象;2)数据库查询尽量加索引,避免select*,减少慢查询;3)高频查询数据使用Redis、Memcached缓存;4)循环内部不做数据库查询、不做文件读写;5)开启OPCache缓存PHP编译字节码,提升运行速度;6)合理使用静态变量、常量,减少重复计算。七、框架与实战面试(Laravel/TP通用)21、MVC架构的含义和分工?答案:M模型(Model):负责数据层,数据库查询、数据处理、业务数据逻辑;V视图(View):负责展示层,页面渲染、数据展示;C控制器(Controller):负责调度,接收请求、调用模型、分配视图,处理请求逻辑。MVC核心是分层解耦,让代码结构清晰、便于维护迭代。22、Laravel服务容器、依赖注入的理解?答案:服务容器是Laravel的核心,是一个全局对象管理工具,统一管理类的实例创建和依赖关系;依赖注入就是不需要手动new对象,由容器自动注入所需依赖,降低代码耦合度,方便单元测试和代码替换。23、缓存雪崩、缓存穿透、缓存击穿的区别和解决办法?答案:缓存穿透:查询不存在的数据,直接绕过缓存查数据库;解决:空值缓存、布隆过滤器;缓存击穿:热点key过期瞬间,大量请求打向数据库;解决:互斥锁、热点key永不过期;缓存雪崩:大量缓存同时过期,大批量请求压垮数据库;解决:过期时间加随机值、

温馨提示

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

最新文档

评论

0/150

提交评论